Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

Automatische WSUS Serverbereinigung mit Tasks und Skripten

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.

Update vom 1. September 2015

Mittlerweile ist eine neue Version des Artikels unter Windows Server Update Services (WSUS) auf Windows Server 2012 mit automatischer Bereinigung auf diesem Blog verfügbar. Damit einhergehend steht auch eine neue Version 2013 des Skriptes WSUS-CleanUp.zip zum Download bereit.

Da dieser Artikel in meiner Statistik der meist aufgerufene Artikel ist und immer wieder Fragen zu Problemen auftauchen, bitte genauer lesen. Der angegebene Link auf die neue, überarbeitete Version des Artikels enthält u. A. viele Hinweise im Zusammenhang mit Sicherheitsproblemen (PowerShell und IE ADS).

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 Microsoft Technet heruntergeladen und nicht verändert.

Update vom 13. März 2013

Dank des Hinweises von Hans und der Frage von Christoph (siehe Kommentare) habe ich das oben genannte SQL Skript (WsusDBMaintenance.sql) doch angepasst. Dabei habe ich die folgenden letzten vier Zeilen hinzugefügt:

--Delete sync history
PRINT 'Delete sync history.' + convert(nvarchar, getdate(), 121)
DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389')
GO

Der Befehl bewirkt, dass aus der WSUS-Datenbank alle alten Synchronisierungseinträge entfernt werden. Dadurch war eine Anpassung oder Änderung des Aufruf-Skriptes (WSUS-Serverbereinigung.cmd) nicht notwendig. Weitere Informationen zum Löschen der Synchronisierungseinträge findet man bei wsus.de.

Anpassung an die eigene Umgebung

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

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

In der Variable WSUSPATH muss der Pfad angegeben ohne finalen Backslash (\) werden, an dem sich die Skripte befinden. Der Servername in WSUS-SERVER bedarf 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 (SQLCMD) 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 bzw. des Abfragetools sqlcmd.exe

Wer die Datei sqlcmd.exe auf seinem Server vermisst, hat sicher die integrierte Windows-Datenbank installiert,  für die Installtion des fehlenden Kommandozeilentools benötigt man das Befehlszeilen-Abfragetool von SQL Server

  • SQLServer2005_SQLCMD.msi für 32 Bit Systeme
  • SQLServer2005_SQLCMD_x64.msi für 64 Bit Systeme

des Feature Pack für SQL Server. Für die grafische Verwaltung der Datenbank (und des SQL-Servers) lädt man sich einfach das Microsoft SQL Server Management Studio Express herunter und installiert selbiges.

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.

Ausführung

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 in Zeile 18 mit dem Befehl

Set-ExecutionPolicy Remotesigned

dass PowerShell Skripte ausgeführt werden dürfen, die selbst geschrieben und nicht digital signiert wurden.

Die Ausführung des PowerShell-Skriptes WSUS-Serverbereinigung.ps1 von WSUS.DE selbst geschieht in der nächsten Zeile 19, hier werden die Parameter WSUS-Server und Port übergeben. 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.

Fazit

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

Einen Blog am Leben zu erhalten kostet Zeit und Geld. Da ich auf meiner Seite weder Werbung einbinde, noch andersweitige Zuwendungen erhalte, freue ich mich über jede kleine Spende. Einfach und unkompliziert geht das über PayPalMe. Du unterstützt damit diesen Blog. Vielen Dank.

Kommentare für “Automatische WSUS Serverbereinigung mit Tasks und Skripten”

  • Bent Schrader

    Auf Grund der am 25. Mai 2018 in Kraft tretenden europäischen Datenschutz-Grundverordnung wurden alle Kommentare abgeschaltet und gelöscht. Damit wird die Erhebung personenbezogener Daten vermieden. Das DSGVO wurde von Professor Thomas Hoeren zu "einem der schlechtesten Gesetze des 21. Jahrhunderts" gekürt, mit der Bemerkung, dass überbordene Werk sei "hirnlos". Ich bedaure sehr, das damit die Möglichkeit zum Austausch von Informationen von Gleichgesinnten verhindert wird.