dani
Goto Top

WSUS 3.0 - Updates und Computer per Powershell-Script aufräumen

Wer kennt das nicht: Im lokalen Netzwerk steht/en einer oder mehrere WSUS-Server die täglich / wöchentlich ihre Updates synchronisieren und downloaden. Nun werden oft alte Updates durch Neue ersetzt (Revisionen) aber auch viele Upates werden auf Grund eines Servicepack nicht mehr benötigt. Dem WSUS-Server manuell in bestimmten Zeitabständen hinterher zuräumen ist einfach lästig und kostet wertvolle Arbeitszeit.

Bisher war es nicht möglich mit Hilfe von Microsoft - Tools diesen Vorgang zu automatisieren. Mit der neuen Kommandozeilenprogramm "Powershell" ist es nun problemlos möglich.
Zuerst speichert ihr folgenden Quellcode in eine Textdatei mit der Endung ".ps1" ab:

#Region PARAMETERS
  
### WSUS Verbindungsparameter ###

# Servername
[String]$updateServer = "test01.domain.local"   

# SSL Verbinung, $True = Ja, %False = Nein
[Boolean]$useSecureConnection = $False 

# Gibt den Port an auf welchem der WSUS-Server lauscht
[Int32]$portNumber = 80 
  

### Aufräum-Parameter ###


# Ersetzte Updates
# Lehnen Sie Updates ab, die min. 30 Tage lang nicht genehmigt wurden, die zurzeit von keinem Client benötigt werden und die durch ein genehmigtes Update ersetzt werden.
[Boolean]$supersededUpdates = $True 

# Abgelaufene Updates
# Lehnen Sie Updates ab, die von Microsoft nicht genehmigt wurden und deren Gültigkeit abgelaufen ist. 
[Boolean]$expiredUpdates = $True 

# Nicht verwendete Updates
# Löschen Sie Updates die abgelaufen sind und min. 30 Tage lang nicht genehmigt wurden. 
[Boolean]$obsoleteUpdates = $True 

# Nicht verwendete Updaterevisionen
# Löschen Sie ältere Revisonen von Updates, die min. 30 Tage lang nicht genehmigt wurden. 
[Boolean]$compressUpdates = $True 

# Computer, die keine Verbindung mit dem Server herstellen
# Löschen Sie Computer, die innerhalb von min. 30 Tagen keine Verbindung mit dem Server hergestellt haben. 
[Boolean]$obsoleteComputers = $True 

# Nicht erfoderliche Updatedateien
# Löschen Sie Updatedateien, die von Updates oder Downstreamservern nicht benötigt werden. 
[Boolean]$unneededContentFiles = $True 

#EndRegion PARAMETERS


#Region PROGRAM

# Lade .NET - Assembly 
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")   
  
# Verbindung zum WSUS-Server wird aufgebaut 
$Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($updateServer,$useSecureConnection,$portNumber)

# Startet den Aufraeumvorgang
$CleanupManager = $Wsus.GetCleanupManager() 
$CleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope($supersededUpdates,$expiredUpdates,$obsoleteUpdates,$compressUpdates,$obsoleteComputers,$unneededContentFiles)
$CleanupManager.PerformCleanup($CleanupScope) 
  
#EndRegion PROGRAM
Bitte wundert euch nicht, dass im obigen Script 6 Parameter definierbar sind und im WSUS - Dialog (Optionen => Assistent für die WSUS-Serverbereinigung) nur Fünf Stück. Per Skript ist es möglich den Punkt "Nicht verwendete Updates und Updaterevisonen" getrennt anzusprechen. Das Script könnt ihr dann als geplante Task einrichten. Wie ein Powershell-Script gestartet wird, könnt ihr hier nachlesen.


Viele Grüße,
Dani

Content-Key: 124914

Url: https://administrator.de/contentid/124914

Printed on: April 19, 2024 at 20:04 o'clock

Member: -Giraffe-
-Giraffe- Sep 18, 2009 at 08:03:42 (UTC)
Goto Top
Hi Dani,

vielen Dank für die Mühe!

Arbeite mich gerade ein zum Thema WSUS und werde das mal testen...

Gruß
Member: manuel-r
manuel-r Nov 18, 2009 at 17:36:02 (UTC)
Goto Top
Hi Dani,
ich wollte das Script gerade mal testen, weil ich meinen WSUS mal aufräumen müsste. Ganz nebenbei: Das ist mein erstes Experiment mit Powershell und schon gleich stehe ich vor einem gaaaaanz kleinen Problem. Die PS meint nämlich es handelt sich nicht um ein PS-Script und meckert mich mit
Die Benennung "wsuscleanup.ps1" wurde nicht als Cmdlet, Funktion, ausführbares Programm oder Skriptdatei erkannt. Überprüfen Sie die Benennung, und versuchen Sie es erneut. Bei Zeile:1 Zeichen:15 + wsuscleanup.ps1 <<<<
an. Was mache ich falsch?

Manuel
Member: Dani
Dani Nov 19, 2009 at 21:07:21 (UTC)
Goto Top
Hallo Manu,
hast du die Variable "[String]$updateServer" und "[Int32]" für dich angepasst?! Ich starte mein Script manuell auf einem Windows Server 2003 so:
C:\>"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" "c:\wsus\serverbereinigung.ps1"  
Und dann erscheint die Ausgabe des Checks:
SupersededUpdatesDeclined : 0
ExpiredUpdatesDeclined    : 0
ObsoleteUpdatesDeleted    : 0
UpdatesCompressed         : 0
ObsoleteComputersDeleted  : 0
DiskSpaceFreed            : 0
Was ich vergessen habe zu schreiben, dass ggf. noch ein Registrywert angepasst werden muss. Und zwar unter "HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" und dort einen neuen REG_SZ - Schnlüssel mit dem Namen "ExecutionPolicy" und als Wert "RemoteSigned".


Grüße,
Dani
Member: JOML
JOML Mar 03, 2010 at 08:50:38 (UTC)
Goto Top
Hallo,

Vielen Dank für die Anleitung.

Jetzt habe ich aber das Problem, dass wir eine SQL DB verwenden wollen... gibt es da auch eine Möglichkeit, dies so per Script durchzuführen...?

Gruss
JOML
Member: Dani
Dani Mar 03, 2010 at 17:57:38 (UTC)
Goto Top
Moin,
was spielt der SQL-Servertyp für eine Rolle?
Wie du oben siehst, wird eine WSUS-Schnittstelle geöffnet. Sollte also auch funktionieren...


Grüße,
Dani
Member: JOML
JOML Mar 03, 2010 at 18:40:47 (UTC)
Goto Top
Hi,

OK.. das heisst also, ich kann das Script auf dem WSUS Server laufen lassen... auch wenn die DB auf einem externen SQL 2008 Server liegt..?


Gruss
JOML