WSUS mit PowerShell verwalten: Computer, Updates, Genehmigungen


    Tags: ,

    WSUS mit PowerShell verwaltenDas bevor­zugte Manage­ment-Tool für die Windows Server Update Services (WSUS) ist die grafische Kon­sole. Seit Windows Server 2012 lassen sich die Update-Dienste aber auch weit­gehend über Power­Shell verwalten. Beson­ders flexi­bel ist diese bei der Fil­terung von Updates, um deren Status zu ändern.

    Grundsätzlich lassen sich auch mit dem MMC-Tool differen­zierte Abfragen auf die vorhandenen Updates erstellen, indem man dafür eigene Update-Ansichten erzeugt und zusätzliche Spalten einblendet, nach denen man die Daten sortiert.

    Verfügbare Cmdlets und Methoden

    PowerShell bietet jedoch zusätzliche Optionen und steht der GUI auch in puncto Reporting nicht wesentlich nach. Die Berichte, für die man in der WSUS-Konsole den Report Viewer nach­installieren muss, bestehen überwiegend aus schmucklosen Tabellen, die man in PowerShell mit Out-GridView ebenfalls bekommen kann.

    Um im ersten Schritt einen Überblick über die verfügbaren Cmdlets zu erhalten, gibt man folgenden Befehl ein:

    Get-Command -Module UpdateServices

    Liste der Cmdlets für das Management von WSUS

    Egal, ob man damit die verfügbaren Updates, die zugeordneten Computer oder die Genehmigungen remote bearbeiten möchte, zuerst muss man immer eine Verbindung zu einem WSUS-Server aufbauen. Diesem Zweck dient das Cmdlet Get-WsusServer:

    $WSUS = Get-WsusServer -Name ws2016-wsus -PortNumber 8530

    In diesem Fall würde man eine Verbindung mit WS2016-WSUS herstellen, und zwar über Port 8530 (die Angabe des Ports ist erforderlich). Das zurückgegebene Objekt vom Typ UpdateServer wird in der Variable $WSUS gespeichert. Wie man mit

    $WSUS | Get-Member -MemberType Method

    leicht feststellen kann, bietet dieses noch eine Vielzahl weiterer Methoden, die noch über die Möglich­keiten der Cmdlets hinausgehen.

    Methoden, die ein Objekt vom Typ UpdateServer enthält

    Informationen zu WSUS-Server ausgeben

    Einige der Cmdlets und Methoden helfen dabei, die Konfiguration von WSUS zu untersuchen. Die allge­meine Konfiguration des WSUS-Severs zeigt

    $WSUS.GetConfiguration()

    Jene zur Datenbank mit bekommt man mittels

    $WSUS.GetDatabaseConfiguration()

    Interessiert man sich für den konfigurierten Synchronisierungs­zeitplan, dann erteilt

    $WSUS.GetSubscription()

    diese Auskunft. Weitere Methoden, die in diesem Zusammenhang interessant sein könnten, sind:

    • GetDownstreamServers()
    • GetContentDownloadProgress()
    • GetStatus()

    Reports für Computer

    Das Cmdlet Get-WsusComputer gibt die einem WSUS-Server zugeordneten Computer aus. Dabei helfen Parameter wie NameIncludes, Computer­Target­Groups oder ToLastSyncTime, die Liste zu filtern.

    Eine regelmäßige Aufgabe bei der WSUS-Administration besteht darin, inaktive Computer zu finden, die den WSUS-Server schon länger nicht mehr kontaktiert haben. Diese sind werden mit der Zeit zu Risikokandidaten, wenn sie wichtige Updates nicht erhalten.

    Get-WsusComputer -UpdateServer $WSUS -ToLastSyncTime "12.03.2018"

    Dieses Kommando würde alle Computer anzeigen, die ihre Updates seit dem 12. März 2018 nicht mehr mit dem WSUS-Server synchronisiert haben.

    Will man einfach nur wissen, wie viele Computer seit einem bestimmten Datum inaktiv waren, dann erhält man diese Information so:

    $WSUS.GetComputersNotContactedSinceCount("03.20.2018")

    Über das Datum im Format mm.dd.yyyy bestimmt man den Zeitraum, seit dem sich Computer nicht mehr bei WSUS gemeldet haben.

    Folgendes Beispiel gibt aus, wann die Computer der Gruppe "IT" das letzte Mal mit dem WSUS-Server synchronisiert wurden und welches Ergebnis die Operation hatte:

    Get-WsusComputer -UpdateServer $WSUS |
    ? RequestedTargetGroupName -eq "IT" |
    select FullDomainName, LastSyncResult, LastSyncTime

    Gruppen anzeigen und Computer einsortieren

    Will man die Liste aller vorhandenen Gruppen anzeigen, denen man die Computer zuordnen kann, dann kommt man so ans Ziel:

    $WSUS.GetComputerTargetGroups() | select Name, Id

    Möchte man dann alle Computer, deren Namen "Win10" enthält, in die Gruppe "Dev" verschieben, dann ließe sich das folgendermaßen erreichen:

    Get-WsusComputer -UpdateServer $WSUS -NameIncludes "Win10" |
    Add-WsusComputer -TargetGroupName "Dev"

    Updates analysieren

    Die häufigste Tätigkeit des WSUS-Admins besteht wohl darin, die verfügbaren Updates zu prüfen, sie freizugeben oder sie abzulehnen, um sie dann aus der Datenbank zu entfernen. Für die meisten Anforderungen dürfte das Cmdlet Get-WsusUpdate reichen.

    Die Parameter UpdateId, RevisionNumber, Classification, Approval und Status erlauben eine Eingrenzung der zumeist zahlreichen Updates, wo die letzten drei am wichtigsten sind:

    Get-WsusUpdate -UpdateServer $WSUS -Approval Unapproved -Status Needed -Classification Security

    Updates filtern mit Get-WsusUpdate

    Dieser Befehl würde alle Updates anzeigen, die noch nicht genehmigt, aber von Computern angefordert wurden, und als Sicherheits-Updates klassifiziert sind. Eine weitere Eingrenzung ist nur möglich, wenn man bestimmte Attribute wie Products über ein Where-Object (Alias '?') filtert:

    Get-WsusUpdate -UpdateServer $WSUS -Approval Unapproved -Status Needed |
    ? Products -like "Windows 10"

    Über dieses Kommando würde man die nicht genehmigten, aber von Computern angeforderten Updates für Windows 10 bekommen.

    Weitere Eigenschaften eines WsusUpdate-Objects, die man für Filter heranziehen kann, erhält man wieder über Get-Member:

    Get-WsusUpdate -UpdateServer $WSUS -UpdateId <UpdateId> |
    Get-Member -MemberType Property

    Eigenschaften eines WsusUpdate-Objekts anzeigen mit Get-Member

    Updates genehmigen oder ablehnen

    Bei den Updates im letzten Beispiel handelt es sich um Kandidaten, für die eine Freigabe fällig ist. Dazu leitet man den Output des Befehls an Approve-WsusUpdate weiter:

    Get-WsusUpdate -UpdateServer $WSUS -Approval Unapproved -Status Needed |
    Approve-WsusUpdate

    Umgekehrt könnte man auf analoge Weise auch Updates abweisen, wenn sie bestimmten Kriterien entsprechen:

    Get-WsusUpdate -UpdateServer $WSUS -Approval AnyExceptDeclined `
    -Status InstalledOrNotApplicable |
    ? UpdatesSupersedingThisUpdate -ne "Keine" |
    Deny-WsusUpdate

    Dieser Befehl würde alle Updates ablehnen, die noch nicht abgelehnt sind und den Status Installiert oder Nicht zutreffend haben. Als zusätzlicher Filter kommt hinzu, dass die Updates durch andere Updates ersetzt worden sein müssen (Updates­Superseding­This­Update).

    Updates nach bestimmten Kriterien ablehnen

    Mit der Methode GetUpdates() lässt sich das gleiche Anliegen kompakter formulieren:

    $WSUS.GetUpdates() |
    ? {$_.State -eq "NotNeeded" -and $_.IsSuperseded -eq $true -and $_.IsDeclined -eq $false} |
    % {$_.decline()}

    Automatische Genehmigungen konfigurieren

    Die Regeln für das automatische Genehmigen von Updates lassen sich über PowerShell erstellen, ändern und löschen. Möchte man zum Beispiel alle aktiven Regeln deaktivieren, dann ginge das so:

    $r = $wsus.GetInstallApprovalRules() | ? Enabled -eq $true
    $r.Enabled = $false
    $r.Save()

    Möchte man nicht aktivierte Regeln entfernen, dann ließe sich das mit Hilfe von DeleteInstallApprovalRule() erledigen. Für neue automatische Genehmigungen wäre CreateInstallApprovalRule() zuständig.

    Eigenschaften und Methoden von ApprovalRules

    Letztere legt eine Regel nur an, die jeweiligen Eigenschaften müsste man dann explizit mit Methoden wie SetCategories(), SetComputerTargetGroups() oder SetUpdateClassifications() konfigurieren und dann wieder mittels save() speichern.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Keine Kommentare