WSUS per Powershell abfragen/ansprechen

wsus powershell get member 1111

Auch der WSUS bietet mittlerweile die Möglichkeiten sich per Powershell abfragen zu lassen. Das ist besonders nützlich für ein automatisiertes Reporting oder auch für die Eine oder Andere Verwaltungsaufgabe oder standardisierte Konfiguration.

Über Powershell eine Verbindung zum WSUS aufbauen

Als erstes wird die Verbindung zum WSUS in der Powershell aufgebaut:

$selected_server=mywsus $wsus_tcp_port=8530 [void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”) $wsus=[Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($selected_server,$FALSE,$wsus_tcp_port)

Durch den Aufruf der Variable “$wsus” könnt ihr nun sehen mit welchen WSUS ihr verbunden seid und wie er im groben konfiguriert ist.

$wsus

Ich erläutere hier nun nicht alle Befehle, Möglichkeiten. Wer aber weiter mit Powershell in den WSUS abtauchen möchte, sollte unbedingt einen Blick auf die möglichen Parameter werfen. Dazu ruft ihr den folgende Befehl auf:

$wsus | Get-Member –Type Method

Weitere Informationen von WSUS Clients per Powershell abfragen

Ich frage den WSUS gerne mal zu den Systemen ab, um deren Hardware- und Softwareversionen zu erhalten. Dazu nutzt ihr

 $wsus.SearchComputerTargets("Teil des Hostnames") | ft

Wer eine Übersicht über alle angebundenem Betriebssystem, Hardwaremodell etc. erzeugen möchte, kann dies mit dem $wsus.GetComputerTargets() machen:

$wsus.GetComputerTargets() | group-object -property OSDescription
$wsus.GetComputerTargets() | group-object -property Model

Für eine detailliertere Liste mit den Clientnamen…

$wsus.GetComputerTargets() | ft -Property FullDomainName,OSDescription -AutoSize

Wer tiefer in die Verwaltung des WSUS mit Powershell abtauchen möchten, findet im Technet von den ScriptingGuys sehr viele anschauliche Erklärungen.https://blogs.technet.microsoft.com/heyscriptingguy/2013/05/27/use-the-updateservices-module-to-manage-wsus/

aktuellen Downloadstatus per Powershell anzeigen / BITS

Get-BitsTransfer -AllUsers | select -ExpandProperty FileList

disconnected WSUS Clients aus dem WSUS löschen

Wer dem WSUS Bereinigungs Assistenten / WSUS Cleanup Wizzard nicht so viel vertrauen schenkt, kann auch selber Computer, die sich eine gewissen Anzahl an Tagen nicht mehr gemeldet haben, aus dem Wsus löschen.

[void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”)
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer("mein_wsus.local",$FALSE,8530)
 
$delete_Clients_older_than=10 #Tage
 
$wsus_clients_obsoleted=$wsus.SearchComputerTargets("c") | Sort-Object LastSyncTime,FulldomainName
 
$EndDate=(GET-DATE)
foreach($wsus_clnt in $wsus_clients_obsoleted){
 
    $StartDate=[datetime]$wsus_clnt.LastSyncTime
    $diff=NEW-TIMESPAN –Start $StartDate –End $EndDate
 
    if($diff.Days -gt $$delete_Clients_older_than){
        write-host "- "$wsus_clnt.FullDomainName":"$diff.Days"days no contact! ("$wsus_clnt.LastSyncTime") - wurde vom WSUS entfernt"
        $wsus_clnt.Delete()
    }  
}

Computer anzeigen die sich nicht synchronisiert haben

[void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”)
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer("mein_wsus.local",$FALSE,8530)
 
$Tage=5
$timeSpan = new-object TimeSpan($Tage, 0, 0, 0)
$computers_n_contacted = $wsus.GetComputersNotContactedSinceCount([DateTime]::UtcNow.Subtract($timeSpan))
$computers_n_contacted 
 
### show lastSyncTime
$wsus.SearchComputerTargets("c") | Sort-Object LastSyncTime,FulldomainName | ft -Property LastSyncTime,FulldomainName

Windows Updates per Powershell ablehnen, decline

$decline_updates=@("Windows XP",
                    "Windows 7",
                    "Windows Server 2003",
                    "Windows Server 2008",
                    "Windows 8",
                    "ARM64-based",
                    "Internet Explorer 10")

$wsus_server="dc01.mj.local";

#### Configuration END ####

[void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”)
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($wsus_server,$FALSE,8530)

foreach($upd in $decline_updates){

    $update = $wsus.SearchUpdates($upd)
    $update | Select-Object Title
    $update.Decline()
}

weitere Beiträge zum Thema Powershell und WSUS