SBS2008: WSUS Log läuft voll …

Auf allen meinen SBS 2008 Systemen läuft mir in unregelmäßigen Abständen das Systemlaufwerk mit IIS (WSUS) Logfiles zu.

Zwar hat Microsoft mit den Update Rollup 5, http://support.microsoft.com/kb/2458094 hier eine Besserung versucht, aber (zumindest auf meinen Servern) ohne Erfolg.

Deshalb habe ich selbst ein PowerShell Script geschrieben, welches mir (abhängig wie man es in den Scheduler einträgt) das Logfile Verzeichnis löscht. Im Gegensatz zur Microsoft Lösung werden nicht Dateien älter X-Tage gelöscht, sondern – ein wenig radikaler – alle Dateien bis auf n. Dieser Ansatz erschien mir sinnvoller, da mir in der Regel 2 Dateien reichen – sollte im Rahmen einer Fehleranalyse eine größere Anzahl benötigt werden dann kann das im Script Problemlos geändert werden.

So, hier ist das Script:

$Comments = @'
Script name: wsuslogcleaner.ps1
Created on : 2011-07-25
Author     : b!
Purpose    : Deleting WSUS logfiles in the C:inetpublogsLogFilesW3SVC1372222313 directory on SBS 2008 servers
             Regarding the original wsuslogcleaner.vbs provided this script simply delete all files exceptionally the 2 latest log files
Use        : Add this script to the task scheduler and execute it on a weekly base
Result     : Cleaned IIS / WSUS log directory, wsuslogcleaner.log will be created in windowstemp directory
Version    : 1.1

History    : v0.1, first Version with basic functionality
             v1.0, final relase
             v1.1, different parameter handling

'@

# Variables
[string]$log = $env:windir + "\temp\wsuslogcleaner.log"
[string]$LogFilePath = "C:\inetpub\logs\LogFiles\W3SVC1372222313"
[int]$n = 2

# - some output like header and so on ...
$msg = "WSUSLogCleaner.ps1, Cleaning WSUS log directory on IIS..."
Write-Host -foregroundcolor green `n$msg `n 
Write-Output `n$msg`n | Out-File -Encoding ASCII -FilePath $log

# - functions
# - delete the logfiles
Function Dir-CleanUp {
    [string]$fLogFilePath = $args[0]
    [int]$i = 0
    [int]$fn = ++$args[1]
    [string]$RC = ""
    [string]$Call = ""
    [string]$fileEntry = ""

    Write-Host "Deleting logs in " $fLogFilePath 
    Write-Output "Deleting logs in " $fLogFilePath | Out-File -Encoding ASCII -Append -FilePath $log

    $fileEntries = [IO.Directory]::GetFiles("$fLogFilePath"); 
    $RC = " RC=[$?], "; $Call = ('$fileEntries = [IO.Directory]::GetFiles("$fLogFilePath")').ToString()
    $RC + $Call | Out-File -Encoding ASCII -Append -FilePath $log

    For (;$i -le (($fileEntries).Count - $fn);$i++) {
        # Write-Host $fileEntries[$i]
        $fileEntry = $fileEntries[$i]
        Remove-Item $fileEntries[$i] -force
        $RC = " RC=[$?], "; $Call = ('Remove-Item ' + "$fileEntry" + ' -force').ToString()
        $RC + $Call | Out-File -Encoding ASCII -Append -FilePath $log
    }      
}

# Main Program
Dir-CleanUp $LogFilePath $n
Write-Host "Script finished ..."
Write-Output "Script finished ..." | Out-File -Encoding ASCII -Append -FilePath $log
# End

Zum Script muss man folgendes Wissen:

  • Es wird eine Log-Datei unter \windows\temp\wsuscleaner.log angelegt, welche Informationen über die gelöschten Dateien enthalten.
  • Die Anzahl der verbleibenden Dateien, steckt in der Variable $n und steht per Default auf 2.

Noch ein Tipp zum Schluss:

Ich baue das Script in den Taskscheduler ein und lasse mir das Logfile per Mail zusenden.

SBS rocks, b!

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s