WSUS Cleanup Wizzard per Powershell remote starten

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“

# 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
}