Tags: Patch-Management, WSUS, PowerShell
Seit Windows 10 1709 und Server 2019 liefert Microsoft das OS mit dem PowerShell-Modul WindowsUpdateProvider aus, dessen Funktionen die grundlegenden Aufgaben des Patch-Managements beherrschen. Admins können damit den Download und die Installation von Updates auch remote anstoßen.
Während sich die meisten anderen Windows-Features schon lange bis ins Detail über PowerShell steuern lassen, fehlte diese Möglichkeit für den Update-Client erst gänzlich und ist mittlerweile eingeschränkt vorhanden. Im Vergleich zum beliebten PSWindowsUpdate von Michal Gajda ist das Microsoft-eigene Modul nur mager ausgestattet.
Verfügbarkeit als Vorteil
Der Vorteil von WindowsUpdateProvider liegt vor allem darin, dass es dafür offiziellen Support gibt und dass es bei allen neueren Versionen des Betriebssystems bereits an Bord ist.
Update: Microsoft hat das Modul aus den ursprünglichen Installationsmedien für Windows 10 2004 entfernt. Nach dem Mai-Update kehrte es auf englischen OS-Versionen wieder zurück, und auch in der Insider Preview für Windows 10 20H2 ist es wieder enthalten. In Windows 10 21H2 und in Windows 11 fehlt es hingegen wieder.
Daher kann man beim Remote-Management davon ausgehen, dass die benötigten Funktionen bereits auf dem Zielrechner vorhanden sind. Dagegen muss man Module von Drittanbietern dort erst einmal installieren.
Hingegen ist es nicht möglich, Microsofts WindowsUpdateProvider auf ältere Versionen von Windows, wie etwa Server 2012 R2 oder 2016, zu kopieren, weil die von den Funktionen benötigte CIM-Klasse dort nicht existiert.
Mehr Kontrolle über Updates
Kommandozeilen-Tools wie usoclient.exe, wuinstall oder PowerShell-Cmdlets geben dem Admin mehr Kontrolle über den Update-Prozess, weil sie den Scan, Download, die Installation oder den Neustart explizit anfordern können.
Praktisch ist dies etwa auf einem frisch installierten Rechner, wenn man diesen durch Einspielen der neueste Patches absichern möchte. Außerdem bietet sich der Einsatz von PowerShell auf Server Core an, weil dort eine GUI für die Verwaltung von Updates fehlt.
Übersicht über den Funktionsumfang
Sucht man mit
Get-Module -Name *Update*
nach Modulen für Windows Update, dann wirft der Befehl zwei Treffer aus. Der eine davon ist WindowsUpdate, dieses Modul enthält aber nur eine Function namens Get-WindowsUpdateLog.
Die für das Management des Update-Clients vorgesehenen Befehle finden sich dagegen in WindowsUpdateProvider. Diese kann man mit
Get-Command -Module WindowsUpdateProvider
ausgeben. Wie man schnell erkennt, handelt es sich dabei um keine Cmdlets, sondern nur um Funktionen.
Wenn man etwa den Inhalt von Start-WUScan mit
Get-Content Function:\Start-WUScan
ausgibt, dann sieht man, dass diese Funktion auf Basis der CIM-Klasse MSFT_WUOperations operiert. Das Gleiche gilt auch für Install-WUUpdates.
Während Get-WULastInstallationDate und Get-WULastScanSuccessDate dazu dienen, vergangene Update-Läufe zu untersuchen und Get-WUAVersion die Version des Clients ausgibt, übernehmen die 3 verbliebenen Funktionen das eigentliche Update-Management.
Nach Updates suchen
Wie der Name vermuten lässt, sucht Start-WUScan nach verfügbaren Updates. Eine Quelle kann man nicht angeben, vielmehr kontaktiert die Funktion den am Rechner konfigurierten Update-Server. Das wird häufig ein WSUS-Server sein.
Gibt man keinen Parameter an, dann tauchen alle für das System zutreffenden Updates im Ergebnis auf. Einschränken kann man die Liste einzig durch SearchCriteria, dem man alle Kriterien in Form eines Suchausdrucks übergeben muss:
Start-WUScan -SearchCriteria "Type='Software' AND IsInstalled=0"
Die Suchkriterien entsprechen jenen, wie sie in der API-Dokumentation beschrieben sind, weitergehende Informationen zu WindowsUpdateProvider bietet Microsoft insgesamt nicht.
Praktisch ist zum Beispiel die Möglichkeit, entfernte Rechner daraufhin abzufragen, ob dort ein bestimmtes Update installiert ist. Nachdem der Parameter ComputerName nicht unterstützt wird, muss man sich mit Invoke-Command behelfen:
$u = Invoke-Command -ComputerName MyPC -ScriptBlock `
{Start-WUScan -SearchCriteria "UpdateId='<GUID-des-Updates>' AND IsInstalled=1"} `
-Credential admin\contoso
Die Variable $u enthält dann alle Updates, die dem Suchkriterium entsprechen.
Updates herunterladen und installieren
Möchte man ausstehende Updates installieren, dann speichert man das Ergebnis von Start-WUScan wie im obigen Beispiel in einer Variablen, die man anschließend an Install-WUUpdates übergibt. Aber erst baut man eine CIM-Session zum entfernten Computer auf:
$cs = New-CimSession -ComputerName MyPC -Credential Credential admin\contoso
Install-WUUpdates -Updates $u -DownloadOnly -CimSession $cs
Dieser Beispielaufruf lädt die Updates nur herunter.
Die Installation stößt man dann mit einer weiteren Ausführung von Install-WUUpdates ohne den Schalter DownloadOnly an:
Install-WUUpdates -Updates $u -CimSession $cs
Ausstehenden Neustart abfragen
Einen eventuell erforderlichen Neustart des Rechners kann man über Install-WUUpdates nicht steuern. Aber es besteht die Möglichkeit, abzufragen, ob ein Reboot ansteht, und zwar mit
Get-WUIsPendingReboot
Gibt die Funktion den Wert $true zurück, dann kann man den PC mittels Restart-Computer zum gewünschten Zeitpunkt neu booten.
Get-WUIsPendingReboot lässt sich auch nutzen, um einen ausstehenden Neustart eines entfernten Rechners abzufragen.
Die Funktion vereinfacht diese Aufgabe im Vergleich zur Methode, welche dafür in der Registry nachschaut, erheblich.
Fazit
Mit dem Modul WindowsUpdateProvider liefert Microsoft seit Windows 10 1709 und Server 2019 die grundlegenden Funktionen für das Management von Updates via PowerShell. Sie eignen sich besonders, um Rechner remote zu aktualisieren. An die Möglichkeiten von PSWindowsUpdate reicht das integrierte Modul aber längst nicht heran.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- Wie unterscheiden sich Security-, optionale Preview- und Außer-der-Reihe-Updates?
- WSUS-Bereinigung als geplante Aufgabe ausführen
- UUP-Updates auf WSUS und Configuration Manager ab März verfügbar
- Unified Update Platform (UUP) on-prem für Windows 10/11 als öffentliche Preview verfügbar
- Microsoft Defender: Updates für Viren-Signaturen über Gruppenrichtlinien und PowerShell steuern
Weitere Links
6 Kommentare
Also windowsupdateprovider ist bei 2004 und 20H2 leider nicht dabei und wenn man es manuell installiert funktioniert es leider nicht. Was läuft ist der Modul pswindowsupdate, allerdings ignoriert er den WSUS und zieht Online die Updates :(
Ich habe nun bei ein paar Installationen von Win10 2004 bzw. H2 nachgeschaut, ob windowsupdateprovider an Bord ist. Tatsächlich scheint es von der Build-Nummer abzuhängen, bei 19042.746 oder 19042.804 ist es etwa dabei. Insgesamt ein ziemlich ärgerliches Rein-raus-Spielchen, das Microsoft da abzieht.
Noch besser wird es wenn Microsoft kurzerhand das cmdlet wieder OnBoard hat, dafür netter Weise vergisst die CimInstance anzupassen.
Oder aber die CimInstance anpasst, so das dass cmdlet nicht mehr dazu passt (20H2 - 19042.928):
Invoke-CimMethod : Fehler beim Laden des Anbieters
In C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\WindowsUpdateProvider\MSFT_WUOperations.psm1:13 Zeichen:20
+ ... $scanres = Invoke-CimMethod -Namespace root/Microsoft/Windows/Window ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (root/Microsoft/...FT_WUOperations:String) [Invoke-CimMethod], CimException
+ FullyQualifiedErrorId : HRESULT 0x80041013,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand
Ich habe mit 20H2 auch den Fehler "Invoke-CimMethod : Fehler beim Laden des Anbieters"
So ein pech. Und ich dachte ich könnte so unsere Clients via Powershell zwingen die Updates zu installieren. :D
Und da sagen die Leute Linux sei kompliziert. ;-)
Man sollte meinen ein simpler Befehl reicht für das Anstossen der Updates.
Kann ich nur bestätigen. Ich entwickle seit mehr als 15 Jahren für beide Plattformen. Windows glänzt durch unnötige Komplexität auf allen Ebenen. Wenn die Linux Implementierung schon lange läuft fummeln wir immer noch am Windows rum...