Do usunięcia plików starszych niż określona liczba dni możemy wykorzystać powershell-a. Może być to przydatne gdy np. codziennie wykonujemy kopię zapasową którą zgrywamy do określonego folderu. W przypadku gdy np. zapomnimy ręcznie usunąć starsze pliki na dysku docelowym może zabraknąć miejsca i kopie przestaną się wykonywać.
Pliki możemy wylistować poleceniem
Get-ChildItem
Po wydaniu takiego polecenia otrzymamy listę wszystkich plików i katalogów w obecnym folderze. W Wydając polecenie możemy zdefiniowac z jakiego folderu chcemy wylistować pliki np.
Get-ChildItem
-Path
c:\temp
W przypadku gdy chcemy wylistować tylko pliki dodajemy parametr -file
Get-ChildItem -Path c:\temp -file
W przypadku gdy chcemy wylistować wszystkie pliki także w podkatalogach dodajemy parametr -recurse
Get-ChildItem
-Path
c:\temp -file -recurse
Aby wylistować pliki starsze niż określona data wydajemy polecenie
Get-ChildItem -Path c:\temp -file|Where-Object { $_.LastWriteTime -lt '04/01/2023'}
W powyższym poleceniu data określona jest na sztywno. Bardziej jednak będzie nas interesowała data pliku w stosunku do obecnej daty. Dokonać możemy tego poprzez wydanie polecenia:
Get-ChildItem -Path c:\temp -file|Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10)}
W powyższym przypadku wyświetlimy wszystkie pliki z folderu c:\temp starsze niż 10 dni w odniesieniu do bieżącej daty.
Aby usunąć te pliki wynik polecenia należy przekierować na polecenie Remove-Item
Get-ChildItem -Path c:\temp -file|Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10)} | Remove-Item -force
Parametr -force wykona polecenie bez dodatkowych pytań o usunięcie.
Możemy także przygotować skrypt:
#Parameter
y$Path= "C:\Temp" # Sciezka ktora chcemy przeszukiwać
$Dni= "20"# Ilosc dni w odniesieniu do biezacej daty
#Obliczenie
daty w stosunku do której chcemy usunac pliki (starsze niz)$Datakasowania = (Get-Date).AddDays(-$Dni)
#Polecenie usuwajace pliki starsze niz 20 dni
Get-ChildItem -Path $Path -File| Where-Object {$_.LastWriteTime -lt$Datakasowania} | Remove-Item -Force
Tak przygotowany skrypt zapisujemy i możemy dodać go do harmonogramu zadań. Uruchamiamy harmonogram zadań i tworzymy nowe zadanie. Na zakładce Ogólne nadajemy nazwę i zaznaczamy opcję „Uruchom niezależnie od tego czy użytkownik jest zalogowany„
Na zakładce Wyzwalacze określamy datę i godzinę wykonania zadania np. codziennie o godz. 18:00
Na zakładce Akcje określamy polecenie do wykonania: w linii Program/skrypt wpisujemy „powershell.exe”, natomiast w opcji Dodaj argumenty podajemy ścieżkę do naszego skryptu wraz z parametrem -executionpolicy
-ExecutionPolicy Bypass C:\skrypty\kasowanie.ps1
Zapisujemy przygotowany harmonogram.