WSUS per Powershell abfragen/ansprechen

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
WSUS Ausgaben Powershell $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
WSUS Powershell Ausgabe get-member

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 Powershell Get-Computertargets
$wsus.GetComputerTargets() | group-object -property Model
WSUS Ausgabe get-Computertargets

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/

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

weitere Beiträge zum Thema Powershell