Installieren und aktualisieren Sie WSUS-Updates per Windows PowerShell

Windows-Updates über WSUS lassen sich auch per PowerShell installieren und aktualisieren. Wir zeigen Ihnen das dazu nötige Skript.

In der Karriere eines jeden Windows-Administrators gibt es einen Punkt, an dem die Vorteile der Kommandozeilen-Automatisierung ganz offensichtlich werden. Bevor es Sie trifft, können Tools wie die PowerShell und VBScript zunächst noch unscharf erscheinen, der Mehrwert mag oberflächlich betrachtet bereits bei der Durchführung kleinerer Aufgaben erschöpft sein. In diesem Fall dürfte der Zeitaufwand für die Erstellung  von komplizierten Automatisierungsaufgaben größer sein als die tatsächlich damit eingesparte Zeit.

Unabhängig von Ihren bisherigen Erfahrungen werden sie aber eines Tages erleben, wie ein kleines Skript Ihr Leben zum Besseren verändern kann. Ein solches Skript war für mich eine kleine, aber leistungsstarke Möglichkeit, Windows Server Update Services (WSUS) effizienter zu installieren und einzurichten. Müde von langen Nächten und langen Abenden musste ich jeden Monat darauf warten, dass die WSUS-Zeitplanung damit begonnen hat die Server im Unternehmen zu aktualisieren. Schließlich habe ich mich dem Problem angenommen und ein VBSkript erstellt, mit dem ich die WSUS-Infrastruktur dazu zwingen konnte, sofort mit der Aktualisierung zu beginnen.

Es dauerte mehr als ein paar Tage und ich benötigte einige Anläufe, aber meine Bemühungen hatten Erfolg und ich konnte das Projekt mit einer praktikablen Lösung erfolgreich abschließen. Ich rief meinen roten WSUS-Knopf auf und konnte mir zukünftig das Warten ersparen. Ein Doppelklick auf das von mir erstellte VBScript führt dazu, dass ein Windows-Computer sofort nach Updates zu scannen beginnt, diese bei Bedarf herunterlädt, installiert und danach neu startet. Da diese Aufgaben automatisiert ablaufen und genau zu dem Zeitpunkt, zu dem ich das möchte, spare ich mir jetzt eine Menge Zeit bei der Aktualisierung meiner Server.

Es kommt aber sogar noch besser, denn das Skript, oder genauer gesagt der Windows Update Agent, akzeptiert die WSUS-Konfiguration, wenn sie entweder manuell oder aber über Gruppenrichtlinien gesteuert ausgeführt wird. Dadurch wird jeder Computer, der bereits Teil einer WSUS-Infrastruktur ist, nur zugelassene Updates berücksichtigen und diese installieren. Umgekehrt würde aber auch jeder Computer, der nicht von einem WSUS-Server verwaltet wird, immer noch alles installieren, was direkt von Microsoft Update vorgeschlagen wird. Durch die Verwendung meines Skriptes schrumpft mein monatlicher Aufwand so von Stunden auf nur noch wenige Minuten.

PowerShell-Skript zum Aktualisieren von WSUS-Updates

Das Skript ist gut und hat lange Zeit gute Dienste geleistet. Aber die Zeiten ändern sich, und genauso auch Skriptsprachen. Heute ist VBScript das Artefakt einer längst vergangenen Zeit und wurde schon vor einer ganzen Weile von der weitaus mächtigeren Powershell ersetzt. Dadurch scheint es an der Zeit, meinen "Installiere WSUS Updates sofort"-Knopf an die heutigen Möglichkeiten und deren Vorteile anzupassen. Die alte Version meines Skriptes kann mit neuen Herausforderungen und der Möglichkeit der PowerShell nicht mithalten.

In den nächsten Abschnitten sehen Sie den neuen Code dieses Skriptes. Diese neue Version ist auch weitaus kürzer als sein VBScript-Vorgänger. Dieses neue Skript scannt ein Windows-System, lädt automatisch notwendige Updates herunter, installiert sie und startet den Computerneu, wenn neu installierte Patches dies erfordern sollten:

#Define update criteria.

$Criteria = "IsInstalled=0 and Type='Software'"

#Search for relevant updates.

$Searcher = New-Object -ComObject Microsoft.Update.Searcher

$SearchResult = $Searcher.Search($Criteria).Updates

#Download updates.

$Session = New-Object -ComObject Microsoft.Update.Session

$Downloader = $Session.CreateUpdateDownloader()

$Downloader.Updates = $SearchResult

$Downloader.Download()

#Install updates.

$Installer = New-Object -ComObject Microsoft.Update.Installer

$Installer.Updates = $SearchResult

$Result = $Installer.Install()

#Reboot if required by updates.

If ($Result.rebootRequired) { shutdown.exe /t 0 /r }

Das Skript habe ich so klein wie möglich gehalten. Nachfolgend möchte ich Ihnen noch einige Erklärungen zu diesem Skript bieten. Natürlich können Sie es jederzeit an Ihre Bedürfnisse anpassen oder ausbauen. Dieses Skript ist grundsätzlich nur rudimentär und soll nur die wichtigsten Aufgaben durchführen.

Die Kommentare der einzelnen Abschnitte deuten bereits auf die Möglichkeiten hin. Sie führen das Skript auf einem Windows-Computer aus. Diese Maschine wird nach dem Aufruf nach allen relevanten Updates suchen und diese herunterladen (und zwar entweder von einem WSUS-Server oder über den Microsoft Update-Server). Danach werden die Updates installiert und das System bei Bedarf neu gestartet.

Mit diesem Skript liefere ich Ihnen eine Minimalform, die Sie gerne für Ihre Zwecke erweitern können. Während mein ursprünglich veröffentlichtes VBScript eines der ersten war, das zur Lösung dieses Problems jemals veröffentlicht wurde, ist das heute anders. Wenn Sie im Internet nach "WSUS-Updates mit Powershell installieren" suchen, dann dürften Sie zahlreiche Ergebnisse mit einer breiten Palette an Optionen finden. Viele der Skripte gehen oft sehr weit und bieten ausführliche Meldungen, Journaling, E-Mail-Ergebnisdateien und all die anderen Nettigkeiten, die Skripte wie diese nützlich machen. Allerdings tritt der zentrale Bereich oft in den Hintergrund und das Skript wird schnell unübersichtlich und schwer ausbaubar.  

Der Aufbau meines Skriptes ist folgender: Im ersten Block dieses Skriptes werden die Kriterien für die zu installierenden Updates gesteuert. Sie finden im Skript einige Beispiel für die zu definierenden Variablen ($). Sie können aber auch mit Hilfe der MSDN-Dokumentation eigene Variablen hinzuzufügen.

Der zweite Block weist den integrierten Windows Update-Agent auf dem lokalen Computer an, fehlende Updates zu suchen. Der dritte Block verwendet diese Ergebnisse, die in der Variablen $Search gespeichert sind, um Updates herunterzuladen. Diese Updates werden dann im vierten Block installiert. Der fünfte und letzte Block führt Abfragen durch, welche die Installation überprüfen und einen Neustart erzwingen, sollte dies notwendig sein.

Da der native Windows Update Agent Konfigurationen akzeptiert, die sowohl manuell als auch über Gruppenrichtlinien definiert werden, verwendet dieses Skript in meiner Umgebung nur die Updates, die ich für die Installation in meiner WSUS-Konsole genehmigt habe. Daher sollten Sie auch genau dort beginnen, bevor Sie dieses Skript für einzelne Maschinen starten. Wenn eine Maschine nicht über einen lokale WSUS-Konfiguration verfügt, wird der Windows Update Agent die Patches von Microsoft Update abfragen. Das ist natürlich von der Konfiguration abhängig, die Sie in Ihrem Unternehmen und im Skript vorgenommen haben.

Es gibt zahlreiche Dinge, die Sie diesem grundlegenden PowerShell-Skript hinzufügen können, zum Beispiel eine Möglichkeit für Datenerfassung, Reports und verschiedene Arten von if/then-Anweisungen und Prüfungen. Sie können auch mehrere dieser Möglichkeiten miteinander verknüpfen.

Selbst wenn Sie noch nie zuvor mit Skripten gearbeitet haben, kleine Automatisierungen wie diese stellen eine gute Möglichkeit dar, wertvolle Stunden Ihres Lebens zurück zu gewinnen. Hoffentlich können Sie mit diesem Skript ein weiteres Stück banaler IT-Arbeit schneller erledigen, damit Sie ein noch effizienterer Windows-Administrator werden.

Folgen Sie SearchDataCenter.de auch auf Facebook, Twitter und Google+!

Erfahren Sie mehr über Desktop-Management