Script – Log Rotation via PowerShell

Da es tatsächlich immer noch Anwendungen oder Tools gibt, die kein integriertes Log File Handling besitzen, habe ich mir ein kleines Skript zur Log Rotation via PowerShell geschrieben. Zugegeben, sehr komplex ist das ist das nicht, dafür aber umso hilfreicher.

Ein IIS Server beispielsweise kann unter Umständen eine ganze Menge an Log Files erzeugen und besitzt eben leider keine eigene Routine zur Bereinigung der Files.

Das Ergebnis sehen wir hier (50,8 GB an *.log Files):

Log Rotation via PowerShell - WinDirStat

Starke Platzbelegung durch IIS Log Files

Dies ist nur ein Beispiel für Anwendungen welche nicht sauber oder gar keine Log Rotation durchführen.

Log Rotation via PowerShell – Das Script

Das Skript sollte durch die drei Variablen sehr vielseitig nutzbar sein.

LogPath Pfad zu den Files
(„<Full Path>\*“)
LogFiles Wildcard für den Filter auf die betroffenen Files
(„*.log“, alle Files mit der Endung log werden gelöscht)
LogRetention Anzahl der Tage für die Log Aufbewagrung
(„-30“, alle Logs älter als 30 Tage werden gelöscht)
$LogPath = "C:\inetpub\logs\LogFiles\W3SVC1\*"
$LogFiles = "*.log"
[int] $LogRetention = "-30" # in Days

Get-ChildItem $LogPath -Include $LogFiles -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays($LogRetention)} | Remove-Item

Das Script ist natürlich auch als GitHub Gist verfügbar.

Als geplanter Task kann somit die Platzbelegung durch die Log Files in Grenzen gehalten werden. Nachteil ist aber natürlich, dass die Logs nicht mehr zur Analyse zur Verfügung stehen. Man könnte alternativ die Log Files vor dem Löschen in ein Zip File verschieben und diese separat aufbewahren, besser ist aber wohl die Erfassung mit einem Log Management System. In meinem Fall ohne Zweifel VMware vRealize Log Insight mit dem IIS Content Pack.

Leave a Reply