Jeder WSUS-Admin weiß wie wichtig es ist dem Windows Server Update Service (WSUS) genügend Aufmerksamkeit zu geben, damit er entweder nicht die Festplattenkapzität sprengt oder seinen Dienst einstellt. Bei einem WSUS im Bestand ist das alles noch einfach über den WSUS Cleanup Wizzard / WSUS Bereinigungsassistenten umzusetzen. Werden es jedoch mehrere, über mehrere Standorte verteilt, ist es äußerst nützlich und Zeit ersparend wenn man den
WSUS Cleanup Wizzard / WSUS Bereinigungsassistenten per Powershell remote zu starten.
Im folgenden Powershell-Script müsst ihr lediglich die FQDN (Full qualified Domainnames) eurer WSUS-Server in das Array „$wsus_server“ eintragen. Sollten eure WSUS-Server nicht über den TCP-Stanardport 8530 laufen, müsst ihr euren Port in die Variable „$wsus_tcp_port“ eintragen.
Welche einzelnen Schritte der
WSUS Cleanup Wizzard / WSUS Bereinigungsassistenten ausführen soll, könnt ihr über „$true“ und „false“ in den folgenden Parametern festlegen. Wofür welcher Parameter steht, sollte sich aus der Bezeichnung ergeben: „$DeclineSupersededUpdates“, „$DeclineExpiredUpdates“, „$CleanupObsoleteUpdates“, „$CompressUpdates“, „$CleanupObsoleteComputers“, „$CleanupUnneededContentFiles“
Das komplette Powershell Script für WSUS Cleanup
# Scriptname: wsus_start_cleanup_wizzard
#
# Requirements:
# - Powershell
# - Installed WSUS Management Console
#
# https://support.microsoft.com/de-de/kb/315071
#
# Configuration:
# - set the address of wsus server's in wsus_server
#
#### Configuration ####
$wsus_server=@("wsus01.standort1.local","wsus01.standort2.local")
$wsus_start_CleanupWizzard=1 # if 1 = start WSUS Cleanup Wizzard, if 0=disabled
$wsus_tcp_port=8530
#### WSUS SETTINGS
$DeclineSupersededUpdates = $true
$DeclineExpiredUpdates = $true
$CleanupObsoleteUpdates = $true
$CompressUpdates = $true
$CleanupObsoleteComputers = $true
$CleanupUnneededContentFiles = $true
#### Configuration End ####
$wsus_server_count=$wsus_server.Count
##################
for ($i=0;$i -lt $wsus_server_count; $i++) {
# generate servernames
$selected_server=$wsus_server[$i]
write-host "- selected WSUS:"$selected_server
write-host "- Pingcheck 1 in progress...wait..."
###
### Pingcheck 1 - with autodetected server
###
$Pingcheckresult_failed=0
if (-not (Test-Connection -ComputerName $selected_server -Count 1 -Quiet)){
$Pingcheckresult_failed = 1;
Write-Host "- Pingcheck failed! skip server "$selected_server
}else{
Write-Host "- Pingcheck successful: "$selected_server
}
###
###
###
if ($Pingcheckresult_failed -eq 1){
Write-Host "- Pingcheck failed! skip server "$selected_server
Write-Host "- Script aborted!"
}else{
### create a connection to WSUS
Write-host "- create a connection to "$selected_server
[void][reflection.assembly]::LoadWithPartialName(“Microsoft.UpdateServices.Administration”)
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($selected_server,$FALSE,$wsus_tcp_port)
write-host "- start CleanupWizzard...."
# https://gallery.technet.microsoft.com/scriptcenter/fd39c7d4-05bb-4c2d-8a99-f92ca8d08218?SRC=Home
$cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope;
$cleanupScope.DeclineSupersededUpdates = $DeclineSupersededUpdates
$cleanupScope.DeclineExpiredUpdates = $DeclineExpiredUpdates
$cleanupScope.CleanupObsoleteUpdates = $CleanupObsoleteUpdates
$cleanupScope.CompressUpdates = $CompressUpdates
$cleanupScope.CleanupObsoleteComputers = $CleanupObsoleteComputers
$cleanupScope.CleanupUnneededContentFiles = $CleanupUnneededContentFiles
$cleanupManager = $wsus.GetCleanupManager();
$cleanupManager.PerformCleanup($cleanupScope);
}# Pingcheck
}
Weitere Beiträge zu dem Thema WSUS & Powershell
- Mit Powershell Systemdaten von Windows Systemen auslesen
- Powershell Programmierung – Tipps für verständliche Scripte
- Mit Powershell alle SCCM Clients auslesen
- WMI-Filter Zusammenstellung
- 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
- invoke-command – Troubleshooting
- Anmeldedaten der geplanten Aufgaben mit Powershell ändern
- Computer mit Powershell zur Active-Directory hinzufügen (Add-Computer)
- Dateien und Ordner nach Alter löschen mit Powershell und Batch