PowerShell: zadanie usuwania plików starszych niż 7 dni

Jak usunąć pliki starsze niż 7 dni, za pomocą PowerShell’a? Jak zrobić to automatycznie, w określonym cyklu? Takie zadania są najczęstszymi tematami administracyjnymi, poniżej znajdziecie sprawdzone rozwiązanie na cykliczne operacje automatyczne z użyciem skryptu PowerShell. Przykładowe zadanie dotyczy usuwania danych z określonej lokalizacji, kryterium to czas utworzenia plików. Ale w miejsce tego konkretnego skryptu możecie wstawić dowolne polecenie PowerShell….

Zaczynamy od przygotowania skryptu który z określonej lokalizacji usuwa pliki starsze niż 8 dni (wg. daty utworzenia). Skrypt oparty jest o parametry które każdy może łatwo zdefiniować dla swojego środowiska.

#days
$days = (Get-Date).AddDays(-7)

#path
$path = "D:\backups"

#delete files form $path older than $days
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $days } | Remove-Item -Force

Tak przygotowany skrypt zapisujemy w lokalizacji do której będziemy się odwoływać z poziomu Harmonogramu Zadań w naszym przypadku c:\scripts

Uruchamiamy Harmonogram Zadań (Task Scheduler) i z użyciem kreatora tworzymy proste zadanie:

Wprowadzamy nazwę dla zadania, opcjonalnie opis:

Wybieramy kiedy ma wystartować nasze zadanie:

W akcji wskazujemy aby zadanie uruchamiało program (Microsoft powoli zmusza do używania aplikacji w zadaniach co widać na poniższym ekranie):

W polu program/script wskazujemy powłokę powershell:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

A jako argument wskazujemy w lokalizacje naszego skryptu w raz z jego nazwą (koniecznie w ” „ ), w naszym wypadku będzie to:

"C:\scripts\script.ps1"

Zamykamy okno z podsumowaniem naszego zadania:

Zadanie w harmonogramie mamy gotowe, zmieńmy jeszcze tryb jego uruchamiania i wskażmy aby było realizowane przez użytkownika systemowego. W tym celu na zadaniu klikamy prawym przyciskiem myszy wybierając jego właściwości. W oknie właściwości na zakładce Ogólne zmieniamy użytkownika który tworzył zadanie na użytkownika SYSTEM. Zgodnie z poniższym zrzutem ekranu:

Aby nie czekać z testowy uruchomieniem naszego skryptu do zaplanowanego terminu, zawsze warto wykonać zadanie jednorazowo z poziomu Harmonogramu Zadań i sprawdzić w historii czy działa poprawnie a co najważniejsze czy skrypt zadziałał.

Jak widać oprócz skryptowania będzie Was czekać trochę klikania. Od razu odpowiadam że całe powyższe zadanie można oczywiście zdefiniować i utworzyć z poziomu samego PowerShell – przygotujemy na to oddzielny wpis.

Pamiętajcie aby przed utworzeniem zadania i po jego zdefiniowaniu sprawdzić wasze skrypty. Najczęściej pojawiają się problemy z odpowiednimi uprawnieniami, polityką wykonywania skryptów etc. Sam Harmonogram Zadań jest z nami od lat i to jedno z częściej używanych narzędzi przez administratorów.