WSUS GetUpdates() unzuverlässig

Karottenkern

Cadet 2nd Year
Registriert
Okt. 2015
Beiträge
24
Hallo zusammen,
unser Update-Szenario sieht vor, dass Updates zunächst an eine Testumgebung und 30 Tage später für die Produktiv-Umgebung freigegeben werden.

Das Ganze erfolgt per Script. Das Problem besteht bei der Update-Suche für die Produktivumgebung.
Ich hole erst alle genehmigten Updates in das Objekt $approvedUpdates

$WSUS = Get-WsusServer -Name Server.domäne.local -usessl -PortNumber 8531
$approvedUpdates = $wsus.GetUpdates() | where { $_.IsApproved -eq $True }
Die Anzahl der genehmigten Updates entspricht dem, was im GUI-Management angezeigt wird.
Nun möchte ich überprüfen, welche der genehmigten Updates bereits für die Produktivumgebung genehmigt wurden.

Hier findet das Script allerdings inkorrekte Daten.
Folgende Abfrage erkennt bspw. Updates als "für Produktivumgebung genehmigt" obwohl dies nachweislich nicht der Fall ist.
$wsus.GetUpdates() | where { $_.IsApproved -eq $True } | foreach { `
$DontInstall = $false
$_.getUpdateApprovals() | foreach {
if ($_.ComputerTargetGroupId -eq $Produktivumgebung.id ) {
$DontInstall = $true
}


Lasse ich mir alle Updates, welche angeblich für die Produktivumgebung genehmigt sind, ausgeben komme ich auf rund 964 Updates von 1006 genehmigten insgesamt.
Es sind allerdings tatsächlich nur 960 Updates für Produktiv genehmigt.
Diese 4 Updates sollte das Script eigentlich als nicht genehmigt und benötigt erkennen. Überprüfe ich die Genehmigungen dieser Updates sieht man, dass diese auch nur für die Testumgebung und eben NICHT für die Produktivumgebung genehmigt wurden.


Besagte 4 Updates hatte ich früher einmal für Produktiv genehmigt, habe diese allerdings wieder entfernt um eben Updates zu haben, mit denen ich das Script testen kann.

Kann es sein, dass GetUpdates() veraltete Datensätze abfragt?
Gibt es Möglichkeiten das zu ändern?

Liebe Grüße
 
Problem ist gelöst.
if ($_.ComputerTargetGroupId -eq $Produktivumgebung.id ) überprüft ob ein Eintrag existiert, aber nicht ob es freigegeben ist.
if ($_.ComputerTargetGroupId -eq $Produktivumgebung.id -and ($_.Action -eq "Install")) does the trick.
 
Zurück
Oben