ConfigMgr – automatisiertes bereinigen von Log-Dateien auf dem IIS

In der Welt der Webserver-Verwaltung, besonders beim Internet Information Services (IIS), ist es wichtig, die Log-Dateien im Blick zu behalten, um Probleme zu lösen und die Serverleistung aufrechtzuerhalten. Mit der Zeit können sich allerdings viele alte Log-Dateien ansammeln und wertvollen Festplattenspeicher beanspruchen. In diesem Blogbeitrag zeige ich dir ein PowerShell-Skript, das die Bereinigung alter Log-Dateien auf IIS-Servern automatisiert.

Die Herausforderung

Webserver generieren Log-Dateien, die wichtige Informationen über Serveraktivitäten, Fehler und Benutzerinteraktionen protokollieren. Im Laufe der Zeit können diese Log-Dateien anwachsen und Speicherplatz in Beschlag nehmen, was die Serverleistung beeinträchtigen und das Finden relevanter Informationen erschweren kann. Die meistens ConfigMgr-Umgebungen haben dieses Problem, weil sich niemand um die Logfiles kümmert. Wenn dann das Volumen vollgelaufen ist, stellt man dann fest, dass der IIS seine Log-Dateien nicht automatisch löscht.

Nun könntest du natürlich immer mal wieder in die IIS-Logs reinschauen und veraltet Dateien löschen. Da wir aber alle Menschen sind, weißt du bestimmt, dass das nur eine gewisse Zeit funktioniert. In Zukunft vergisst man es dann, weil wichtiger Aufgaben anstehen.

Die Lösung

Um dieses Problem anzugehen, kannst du PowerShell nutzen, um ein Skript zu erstellen, das automatisch die Log-Dateien löscht, die älter sind. Lass uns das Skript genauer betrachten. Das nachfolgende Skript durchläuft rekursiv Unterordner im angegebenen Log-Verzeichnis, identifiziert und löscht Log-Dateien, die das festgelegte maximale Alter überschritten haben.

$LogFolder = "c:\inetpub\logs\LogFiles"
$MaxAge = 30   # in Tagen
$FSO = New-Object -ComObject Scripting.FileSystemObject
$Folder = $FSO.GetFolder($LogFolder)

$Folder.SubFolders | ForEach-Object {
    $SubFolder = $FSO.GetFolder($_.Path)
    $SubFolder.Files | ForEach-Object {
        $FileAge = (Get-Date) - $_.DateCreated
        if ($FileAge.Days -gt ($MaxAge + 1)) {
            $FSO.DeleteFile($_, $true)
        }
    }
}

Wie es funktioniert

  1. Setzen von Variablen: Das Skript legt den Pfad des Log-Ordners ($LogFolder) und das maximale Alter von Log-Dateien, die behalten werden sollen ($MaxAge), fest.
  2. FileSystemObject: Es erstellt ein FileSystemObject, um mit dem Dateisystem zu interagieren und Methoden zum Zugriff und zur Manipulation von Dateien und Ordnern bereitzustellen.
  3. Durchlaufen von Unterordnern und Dateien: Das Skript verwendet eine verschachtelte Schleife, um jeden Unterordner und jede Datei im Log-Ordner zu durchlaufen.
  4. Berechnung des Dateialters: Es berechnet das Alter jeder Datei, indem es das Erstellungsdatum von dem aktuellen Datum/Uhrzeit abzieht. In diesem Fall sind es 30 Tage.
  5. Löschen alter Dateien: Wenn das Alter einer Datei das erlaubte Maximum überschreitet, wird es dauerhaft mit der DeleteFile-Methode gelöscht.

Umsetzungstipps

  • Skript zeitgesteuert ausführen: Verwende den Windows Task Scheduler, um dieses Skript in regelmäßigen Abständen auszuführen. So wird eine zeitnahe Bereinigung ohne manuelle Eingriffe gewährleistet.
  • Parameter anpassen: Ändere die Variablen $LogFolder und $MaxAge entsprechend der Konfiguration deines Servers und deiner Log-Aufbewahrungspolitik.

Ich hoffe, ich konnte dir mit diesem Artikel wieder ein klein wenig weiter helfen. Bitte teste das Skript vorher in einer Testumgebung. Denn das Skript stelle ich hier ohne Gewähr bereit. Solltest du es trotzdem gleich in einer Produktivumgebung einsetzen, bin ich nicht für etwaige Schäden oder Ausfälle verantwortlich.