Nano Server über Windows Update oder WSUS aktualisieren

    Patch-ManagementWährend bei den her­kömm­lichen Installations­varianten von Windows Server 2016 die automa­tischen Updates recht ein­fach über inter­aktive Tools kon­fi­guriert werden können, setzt Nano Server auch hier auf PowerShell. Selbst die Ein­stellungen für WSUS müssen auf diesem Weg in die Registry ge­schrieben werden.

    Für das Patch-Management von Windows Server mit Desktop Experience wird man in kleineren Umge­bungen die App Einstel­lungen bemühen, um die gewünschte Instal­lationsart festzu­legen. Unter Server Core steht dafür das text­orientierte sconfig zu Verfügung. Für die zentrale Verwaltung der Updates empfehlen sich jedoch die Gruppen­richtlinien.

    Keine GPOs für Nano Server

    Keine dieser Optionen existiert jedoch unter Nano Server. Neben der Möglichkeit, Updates manuell herunter­zuladen und per DISM zu installieren, kann man aber trotzdem Windows Update oder WSUS nutzen, wenn man den entsprechenden Vorgang über PowerShell aktiviert.

    Zu diesem Zweck hat Microsoft einen eigenen WMI-Provider für Windows Server Nano entwickelt, der Methoden zum Suchen, Herunterladen und Installieren von Updates bietet. Um sie zu nutzen, kann man im ersten Schritt eine interaktive Remote-Session mit dem Nano Server aufbauen und die Befehle dort eingeben.

    WMI-Provider nutzen

    Möchte man mehrere Server gleichzeitig konfigurieren, dann ist es aber praktischer, wenn man das Cmdlet New-CimInstance auf einer Workstation aufruft und ihm die Namen der Server über den Parameter ComputerName mitgibt. Die nachfolgenden Aufrufe von Invoke-CimMethod sind in beiden Fällen gleich.

    $sess = New-CimInstance -ComputerName nanotemp `
    -Namespace root/Microsoft/Windows/WindowsUpdate `
    -ClassName MSFT_WUOperationsSession

    Nun kann man mit der Methode ScanForUpdates nach vorhandenen Updates suchen:

    $scanResult = Invoke-CimMethod -InputObject $sess `
    -MethodName ScanForUpdates `
    -Arguments @{SearchCriteria="IsInstalled=0";OnlineScan=$true}

    Nach neuen Updates suchen mit der Methode ScanForUpdates

    Auf einem frisch installierten Nano Server würde dieses Kommando per Vorein­stellung nur Windows Update nach verfügbaren Patches durchsuchen. Setzt man im Unter­nehmen jedoch WSUS ein, dann muss man Nano Server schon vorher dafür konfigurieren.

    Registry für WSUS bearbeiten

    Während man Windows Server mit installierter Desktop Experience oder Server Core über ein GPO auf WSUS umlenkt, muss man hier die nötigen Registry-Einträge per Hand setzen. Dieser Beitrag auf MSDN dokumentiert, welche Schlüssel man dazu bearbeiten muss. In einer Minimal­konfiguration muss man zumindest die Adressen für WUServer und WUStatusServer eintragen.

    Nachdem regedit.exe auf Nano nicht zur Verfügung steht, trägt man die Werte für WSUS mit PowerShell ein.

    PowerShell bietet auch die Mittel für die Bearbeitung der Registrierdatenbank. Den Wert für WUServer könnte man so in die Registry schreiben:

    New-ItemProperty -Type String -Name WUServer -value "wsus.contoso.de" `
    -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate

    Gefundene Updates anzeigen und installieren

    Nach dem erfolgreichen Scan enthält die Eigenschaft Update der Variable $scanResult die Liste der gefundenen Patches. Folgender Befehl würde den Titel und die ID des KB-Artikels ausgeben:

    $scanResult.Updates | Select Title, KBArticleID

    Wenn sich zeigt, dass Updates vorliegen, die man installieren möchte, dann kann man dies folgendermaßen tun:

    $inst = Invoke-CimMethod -InputObject $sess `
    -MethodName ApplyApplicableUpdates

    Abhängig vom Umfang und der Anzahl an Updates wird der Vorgang einige Zeit dauern. Anschließend kann man sich mit Hilfe dieses Befehls davon überzeugen, dass die Updates tatsächlich installiert wurden:

    $inst = $sess | Invoke-CimMethod -MethodName ScanForUpdates `
    -Arguments @{SearchCriteria="IsInstalled=1";OnlineScan=$true}

    Alternativ gibt dieser Aufruf mit weniger Tippaufwand die gleiche Auskunft:

    Get-WindowsPackage -Online | ? ReleaseType -eq Update

    In der Regel wird man nun zum Abschluss den Server neu starten, was mit in PowerShell mit Restart-Computer tun kann. Einen Hinweis auf einen ausstehenden Reboot gibt die Eigenschaft PackageState mit dem Wert InstallPending.

    Überprüfen der installierten Updates mit Hilfe von Get-WindowsPackage

    Automatisierung über geplante Aufgabe

    Zu bedenken wäre, dass dieser Vorgang jedes Mal wiederholt werden muss, wenn Updates vorliegen. Das ist zwar nicht so oft wie bei einer Vollinstallation, aber in der Regel steht einmal pro Quartal ein kumulatives Update an.

    Wenn man das Einspielen von Patches automatisieren möchte, dann könnte man die obigen Befehle in einer function zusammen­fassen und in regelmäßigen Intervallen über eine geplante Aufgabe starten.

    Keine Kommentare