Anstehende Windows Updates auf mehreren Computern ermitteln

Der Dotnet-Doktor  –  2 Kommentare

Gerade Windows-Server-Systeme werden oft nicht mit automatischen Updates konfiguriert, denn Administratoren wollen die Kontrolle behalten, wann die Server die Neuerungen installieren. Wurden aber vielleicht einige Computer lange nicht aktualisiert?

Diese Frage beantwortet das nachstehende PowerShell-Skript. Es fragt die in der ersten Zeile angegebenen Computer (egal ob Client oder Server), wie viele Windows-Updates noch nicht installiert wurden. Dafür verwendet das Skript die Methode Search() der COM-Klasse Microsoft.Update.Searcher. Voraussetzung für das Skript ist, dass PowerShell 2.0 oder höher auf den Zielsystemen installiert ist, PowerShell Remoting aktiv ist und der ausführende Benutzer Administratorrechte auf den Zielsystemen hat. Das Ergebnis ist eine Liste, die für jeden Rechnernamen die Anzahl der anstehende Updates liefert. Natürlich kann man das Skript erweitern, indem man zum Beispiel die Computerliste aus dem Active Directory ausliest.

$Computerliste = "Server123","Server456","Server789","Client01","Client02"
# Schleife über o.g. Computerliste
foreach($computer in $Computerliste)
{
# PowerShell-Remoting-Aufruf zu dem Rechner

Invoke-Command -Computer $computer -ArgumentList $computer ↲
-ScriptBlock {
$computer = $args[0]
# Abfrage mit COM-Objekt
$Searcher = New-Object -ComObject Microsoft.Update.Searcher
$Criteria = "IsInstalled=0 and Type='Software'"
$SearchResult = $Searcher.Search($Criteria).Updates
"Computer " + $computer + ": " + $SearchResult.Count + " anstehende ↲
Updates"
}
}