Die Windows Updates Services (aktuelle Version 3.0 SP2) kennt jeder versierte Serveradministrator. Als zentraler Server lädt er entsprechend der Konfiguration alle Microsoft Updates herunter und verteilt diese innerhalb der eigenen Organisation. Dazu benötigt der WSUS eine eigene Datenbank, entweder ein SQL Server 2005 Express Edition (frei zum Download verfügbar) oder – sofern vorhanden – einen vollwertigen SQL Server. Viel wichtiger aber ist Speicherplatz, denn der WSUS muss ja alle Updates für die Rechner der Organisation vorhalten.

Den WSUS setzen wir in vielen Kundenumgebungen ein, beim Small Business Server wird er automatisch installiert, in anderen Umgebungen bringt er bereits bei wenigen Server- und Client-Rechnern viele Vorteile. Allerdings hat auch der WSUS einen Nachteil – er verlangt nach einer regelmäßigen Wartung. Dies kann manuell geschehen, indem in der Konsole der Update Services unter [Optionen] der Assistent für die Serverbereinigungaufgerufen wird.

Grundsätzlich eine gute Sache, aber ich bin ein Freund von möglichst integrierter Automatisierung. Auch das ist beim WSUS möglich. Bei WSUS.DE gibt es ein auf PowerShell basierendes Skript mit dem sich die Serverbereinigung direkt starten läßt.

Allerdings gibt das Skript nur Speicherplatz von nicht mehr benötigten Updates auf der Festplatte frei, die Datenbank SUSDB bleibt davon leider unberührt. Aus diesem Grund habe ich versucht das Skript von WSUS.DE zu optimieren und hier mein Ergebnis vorstellen:

Anleitung

Zuerst bitte die folgenden Skripte WSUS-CleanUp.zip herunterladen und in ein Verzeichnis entpacken. Dort finden sich dann folgende Dateien:

WSUS-Serverbereinigung.cmd
WSUS-Serverbereinigung.ps1
WsusDBMaintenance.sql

Das PowerShell Skript (WSUS-Serverbereinigung.ps1) stammt – wie oben erwähnt – von WSUS.DE, ich habe lediglich den Port-Parameter als Übergabewert in das zentrale Skript (WSUS-Serverbereinigung.cmd) verlagert. Das SQL Skript habe ich mir aus dem Script Center von Technet heruntergeladen und nicht verändert.

Vor der ersten Ausführung muss im zentralen Skript (WSUS-Serverbereinigung.cmd) einige wichtige Einstellungen getroffen werden:

PATH=<Pfad zu den Skripten>
WSUS-SERVER=<Servername>
PORT-NUMBER=<Portnummer>
DATABASECONNECT=np:\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
SQLCMD=”%ProgramFiles(x86)%\Microsoft SQL Server\90\Tools\
Binn\sqlcmd.exe”

Die Werte PATHund WSUS-SERVER bedürfen keiner weiteren Erklärung. Bei PORT-NUMBER muss der Port des WSUS im IIS angegeben werden (auf einem Small Business Server ist das im Standard der Port 8530, nutzt der WSUS die Standardwebseite eines IIS dann lautet der Port 80). Nutzt der WSUS eine SQL Server Express Datenbank kann die Einstellung für DATABASECONNECT belassen werden (Named Pipes), sonst ist der SQL Servername einzutragen. Der Pfad für den Aufruf des SQL Servertools sqlcmd.exe ist von dem Betriebssystem abhängig: bei 32 Bit lautet die Variable %ProgramFiles% bei 64 Bit %ProgramFiles(x86)% - natürlich abhängig von der Version des SQL Servers.

Ich empfehle – so habe ich es auf unseren Systemen umgesetzt – das zentrale Skript WSUS-Serverbereinigung.cmd als Programmaufruf für einen neuen geplanten Task (bei 2003, Aufgabenplanung bei 2008) zu nutzen, welcher wöchentlich 1 mal (der Samstag Vormittag hat sich als Optimum herausgestellt) gestartet werden sollte. In Produktivumgebungen sollte selbstverständlich vor der ersten Ausführung eine Sicherung der SUSDB durchgeführt werden.

Was geschieht nun aber nach dem Aufruf des zentralen Skriptes? Zu Beginn wird eine Protokolldatei WSUS-CleanUp.log im selben Verzeichnis erstellt, in dem alle Aktionen eingetragen werden. Danach bewirkt der Aufruf von PowerShell mit dem Befehl Set-ExecutionPolicy Remotesigned, dass PowerShell Skripte ausgeführt werden dürfen. Genau das geschieht in der nächsten Zeile, in der das PowerShell-Skript von WSUS.DE mit den Parametern WSUS-Server und Port aufgerufen wird. Nach der Bereinigung der WSUS-Dateien wird das SQL Skript von Technet gestartet, welches die SUSDB reindiziert und reorganisiert. Die darauf folgenden Zeilen verkleinern im Anschluss die Datenbank sowie die Datenbankdateien.

Je nach dem wie lange keine Serverbereinigung des WSUS durchgeführt wurde (außerdem wie viele Clients vom WSUS versorgt werden sowie die Leistung des Servers), kann es passieren, dass allein das PowerShell-Skript bis zu 36 Stunden(!) läuft. Deshalb als Task einplanen und laufen lassen – bei einem erneuten Aufruf dauert die gesamte Skriptverarbeitung ca. 30 Minuten. Wem das immer noch zu viel ist, kann natürlich alle Aufrufe des SQLCMD Tools auskommentieren oder löschen.

Wie immer, für Verbesserungsvorschläge, Kritik oder Fragen bin ich immer offen und freue mich über jederzeit über einen Kommentar.