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
- Mit Powershell Systemdaten von Windows Systemen auslesen
- Powershell Programmierung – Tipps für verständliche Scripte
- Mit Powershell alle SCCM Clients auslesen
- WMI-Filter Zusammenstellung
- WSUS bereinigen und Datenpartition verkleinern
- Active-Directory Clients mit Powershell inventarisieren
- Userprincipalname mit Powershell vervollständigen
- AD-User und AD-Gruppen mit Powershell bearbeiten
- alte Dateien löschen mit Powershell
- verbundene Drucker per Powershell als CSV auslesen
- sämtliche Computer der Active-Directory neu starten
- Passwörter der AD-Accounts mit Set-ADAccountPassword setzen
- WSUS auf SSL umstellen