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!