Kasowanie plików starszych niż x dni

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:

#Parametery
$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.