Sicherheitshinweis

Die hier bereitgestellten Skripte sind stets auf eigene Gefahr anzuwenden!
Daher immer erst mit einem nicht-kritischen System oder in einer Testumgebung ausführlich testen!


Einleitung

Jeder, der einen Windows Server Update Services (WSUS) betreut, kennt das Problem… Der WSUS-Content wächst unaufhörlich und vereinnahmt somit immer mehr Festplattenspeicher, obwohl diverse Updates bereits abgelaufen oder ersetzt worden sind.

Wer regelmäßig den Assistenten für die Serverbereinigung unter den WSUS-Optionen ausführt, wirkt diesem Problem entgegen. Jedoch, hängt sich der Assistent sehr gerne während der Bereinigung auf, insofern die letzte Bereinigung sehr lange zurück liegt. Daher sollte der Assistent regelmäßig ausgeführt werden!

Der Assistent für die Serverbereinigung löscht folgende Bereiche:

  • Nicht verwendete Updates und Updaterevisionen
  • Computer, die keine Verbindung mit dem Server herstellen
  • Nicht erforderliche Updatedateien
  • Abgelaufene Updates
  • Ersetzte Updates

Jede Option für sich, kann natürlich von der Bereinigung de-selektiert bzw. ausgenommen werden. Alternativ lassen sich diese Aktionen auch mittels der PowerShell und der Windows Aufgabenplanung automatisieren! Hierzu nutze ich die folgenden Codezeilen, um die WSUS-Serverbereinigung in regelmäßigen Abständen durch die Aufgabenplanung durchführen zu lassen… Bitte beachtet, dass das folgende PowerShell-Skript stets auf eigene Gefahr anzuwenden ist!

Vorbereitungen

  • Das PowerShell-Skript Beispiel an eigene Anforderungen anpassen.
  • Das PowerShell-Skript muss stets mit administrativen Berechtigungen ausgeführt werden.
  • Dienstbenutzerkonto zum Ausführen der Windows Aufgabenplanung erstellen.
    (Alternativ ein Group Managed Account, kurz gMSA, siehe hierzu meinen bereits erstellten Beitrag.)

Variablen anpassen:

  • $Path
  • $LogName
  • [Boolean]$useSecureConnection
  • [Int32]$portNumber
  • [Boolean]$superseededUpdates
  • [Boolean]$expiredUpdates
  • [Boolean]$obsoletedUpdates
  • [Boolean]$compressedUpdates
  • [Boolean]$obsoletedComputers
  • [Boolean]$unneededContentFiles

Codezeilen

Clear-Host
# Region VARIABLES 

# Export Informatonen
$Path                          = "X:\LOGs\WSUS"
$LogName                       = "wsus_cleanup.txt"
$FullPath                      = [System.IO.Path]::Combine($Path,$LogName)

# WSUS Connection Parameters: 
[String]$updateServer          = [System.Net.Dns]::GetHostByName($env:computerName).HostName
[Boolean]$useSecureConnection  = $True
[Int32]$portNumber             = 8531

# Cleanup Parameters:

# Decline updates that have not been approved for 30 days or more, are not currently needed by any clients, and are superseded by an aproved update. 
[Boolean]$superseededUpdates    = $True 

# Decline updates that aren't approved and have been expired my Microsoft. 
[Boolean]$expiredUpdates       = $True 

# Delete updates that are expired and have not been approved for 30 days or more. 
[Boolean]$obsoletedUpdates      = $True 

# Delete older update revisions that have not been approved for 30 days or more. 
[Boolean]$compressedUpdates      = $True 

# Delete computers that have not contacted the server in 30 days or more. 
[Boolean]$obsoletedComputers    = $False 

# Delete update files that aren't needed by updates or downstream servers. 
[Boolean]$unneededContentFiles = $True

# EndRegion VARIABLES 

# Region SCRIPT 

# Load .NET assembly 
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") 

# Connect to WSUS Server 
$Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($updateServer,$useSecureConnection,$portNumber) 

# Perform Cleanup 
$CleanupManager = $Wsus.GetCleanupManager() 
$CleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope($supersededUpdates,$expiredUpdates,$obsoleteUpdates,$compressUpdates,$obsoleteComputers,$unneededContentFiles) 
$CleanupManager.PerformCleanup($CleanupScope) | Out-String | Out-File -FilePath $FullPath -Encoding "utf8"

# EndRegion SCRIPT

Das PowerShell-Skript kann natürlich noch dahingehend abgeändert werden, so dass bei jeder Ausführung ein eigenständiges, neues Protokoll erstellt wird. Jedoch soll das PowerShell-Skript veranschaulichen, wie grundsätzlich dieselben Aktionen gestartet und durchgeführt werden können, wie im Assistenten für die Serverbereinigung.

Automatisieren

Das PowerShell-Skript sollte am besten lokal auf dem WSUS-Server abgespeichert und direkt aus einer Windows-Aufgabenplanung aufgerufen/ausgeführt werden. Dies hat den bedeutenden Vorteil, die Serverbereinigung nicht manuell anstoßen zu müssen und vereinfacht die WSUS-Administration enorm!

Codebeispiel zum Anlegen einer neuen, einfachen Windows-Aufgabe

$TaskAction = New-ScheduledTaskAction "<Program|Script>"
$TaskTrigger = New-ScheduledTaskTrigger -At <Time-24h> -Daily|Weekly|Monthly
$TaskPrincipal = New-ScheduledTaskPrincipal -UserID <DOMAIN>\<SRVNAME> -LogonType Password
Register-ScheduledTask <TASKNAME> –Action $TaskAction –Trigger $TaskTrigger –Principal $TaskPrincipal

Windows-Aufgabe und die notwendigen Optionen:

  • Allgemein (Reiter) –> Sicherheitsoptionen –>
    Unnabhängig von der Benutzeranmeldung ausführen
  • Allgemein (Reiter) –> Sicherheitsoptionen –>
    Mit höchsten Privilegien ausführen
  • Allgemein (Reiter) –> Konfigurieren für:
    Windows Server 20xx
  • Aktionen (Reiter) –> Neu –> Aktion: –>
    Programm starten
  • Aktionen (Reiter) –> Neu –> Einstellungen –> Programm/Skript –>
    %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
  • Aktionen (Reiter) –> Neu –> Einstellungen –> Argumente hinzufügen –>
    -command "X:\Scripts\WSUS\cleanup.ps1"

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload CAPTCHA.