WSUS bereinigen per PowerShell Script
Der Microsoft WSUS ist ein nicht mehr wegzudenkender Server in größeren Netzwerken. Dieser ist für die Genehmigung und Verteilung von Windows Updates zuständig. Oftmals läuft der Speicherplatz der WSUS Datenbank voll, weil der Microsoft WSUS sehr viele alte Updates nicht automatisch löscht. Dies sollte man aber automatisieren. Man kann mit PowerShell seinen WSUS bereinigen lassen – ganz automatisiert. Um den WSUS aufräumen zu können und alte Updates automatisch löschen zu lassen, so benötigt man nur wenige Zeilen Code. 🙂
Man kann natürlich den Server Cleanup Wizard (Bereinigung) zum WSUS bereinigen ausführen, allerdings muss man das immer “händisch” anstoßen. Außerdem wird das dann auch oft vergessen. Deswegen sollten wir den WSUS dazu bringen, automatisch Updates löschen zu lassen. Nur wie? Natürlich per Aufgabenplanung und PowerShell!
WSUS bereinigen – PowerShell Script
Mit folgenden PowerShell Script können automatisiert alte Updates und Computerobjekte gelöscht werden. So wird der WSUS Server aufgeräumt und von alten Files bereinigt. Im Server Cleanup Wizard kann man folgende Kategorien löschen lassen.
- Unused updates and update revisions
- Computers not contacting the server
- Unneeded update files
- Expired Updates
- Superseded updates
Diese Parameter können natürlich in PowerShell auch gewählt werden. In Zeile 28-33 werden diese Punkte konfiguriert. Möchte man eine Update-Kategorie abwählen, so ändert man in dieser Zeile von “$true” auf “$false” ab.
(wsuscleanup.ps1 – Powershell)
<# .SYNOPSIS WSUS bereinigen .DESCRIPTION Fuehrt die WSUS bereinigung mit PowerShell aus .NOTES Version: 1.0 Author: www.ITnator.net | Johannes Huber Creation Date: 14.02.2017 .EXAMPLE Output File in Zeile 24 anpassen #> write-host " " write-host " " write-host " " write-host "###################################" write-host "##### RUNNING SERVER-CLEANUP ######" write-host "###################################" write-host " " write-host " " write-host " " $outFilePath = 'C:\JOBS\WSUS_cleanup\wsusClean.txt' [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(); $cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope; $cleanupScope.DeclineSupersededUpdates = $true $cleanupScope.DeclineExpiredUpdates = $true $cleanupScope.CleanupObsoleteUpdates = $true $cleanupScope.CompressUpdates = $true $cleanupScope.CleanupObsoleteComputers = $true $cleanupScope.CleanupUnneededContentFiles = $true $cleanupManager = $wsus.GetCleanupManager(); $cleanupManager.PerformCleanup($cleanupScope) | Out-File -FilePath $outFilePath write-host "###################################" write-host "##### SERVER-CLEANUP COMPLETE #####" write-host "###################################" write-host " " write-host " " write-host " "
Nun müssen wir nur noch das Script 1x in der Woche per Windows – Aufgabenplanung ausführen lassen. Hierzu werden erhöhte Rechte benötigt – nicht vergessen!
Nachdem das PowerShell Script ausgeführt wurde, sollten alte Updates und alte Dateien gelöscht worden sein. Auf Wunsch – je nach Konfiguration – sollten auch alte Computerobjekte gelöscht worden sein. Somit ist der WSUS aufgeräumt und alte Updates bereinigt.