none
Windows Updates werden über Powershell (Microsoft.Update.Session) nicht richtig bestimmt RRS feed

  • Frage

  • Hallo Forum,

    Ich versuche per Powershell die Anzahl der zur Verfügung stehenden Updates zu bestimmen.

    hier ein Snipped:

    function getImportantWindowsUpdates ([int] $installupdates = 0) {
    	$UpdateSession = New-Object -Com Microsoft.Update.Session
    	$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
    	 
    	$updatecount = 0
    	
    	$updateobject = @{
    		unknown = 0
    		low = 0
    		moderate = 0
    		important = 0
    		critical =0
    	}
    	
    	$SearchResult = $UpdateSearcher.Search("IsInstalled=0 and Type='Software'")
    	 
    	For ($X = 0; $X -lt $SearchResult.Updates.Count; $X++){
    	    $Update = $SearchResult.Updates.Item($X)
    	    
    
    		switch ($Update.MsrcSeverity) {
                { "unknown" }            { $updateobject.unknown++; continue }
                { "low" }                { $updateobject.low++ ; continue }
                { "moderate" }           { $updateobject.moderate++ ; continue }
                { "important" }          { $updateobject.important++ ; continue }
                { "critical" }           { $updateobject.critical++ ; continue }
                Default                  { $updateobject.unknown++; continue }
            }
    	}
    	 	
    	return $updateobject
    }
    
    $osupdates = getImportantWindowsUpdates
    
    Write-Output ("Updates.. optional: " + $osupdates.unknown + " low: " + $osupdates.low + " moderate: " + $osupdates.moderate + " important: " + $osupdates.important + " critical: " + $osupdates.critical)
    

    Auf einem testserver erhalte ich lediglich die Ausgabe 5 unknown/optional.. in der Windows GUI sehe ich aber 5 optional und 1 important update.

    Es sind sicher auch nur 5 Objekte in

    $UpdateSearcher

    enthalten.

    Was mache ich falsch?

    Danke und Gruss,

    Andreas

    Donnerstag, 15. Januar 2015 14:07

Antworten

  • Hi, ich sehe da zwei Probleme auf anhieb:

    - "Type" hat entweder den Wert 1 (Software) oder 2 (Driver), ist also numerisch. Trotzdem klappt das Filtern auch mit Type=1 nicht, scheint ein Bug zu sein. Ich würde alle runterladen die "IsInstalled=0" sind und dann nachträglich auf das Property "Type" filtern. (z.b. mit where-object)

    - "MsrcSeverity" ist nicht geeignet um die Updatekategorie abzubilden. Unter Win 8.1 getestet ist das Feld immer leer. Unter Win 2008 R2 getestet, nicht immer, aber doch zu 40%. Alternativ gibts es auf den ersten Blick nur "BrowseOnly=0". Findet laut Msdn "updates that are not considered optional". Müsstest du mal testen.

    Und dann, nicht wirklich ein Fehler, aber du kannst dir das Aufzählen der einzelnen Updates vereinfachen, in dem du foreach benutzt:

     
    foreach ($item in $SearchResult.updates) { 
    	
    }
      

    Grüße, Denniver




    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 20. Januar 2015 14:32
    Moderator

Alle Antworten

  • Hallo Andreas,

    Würdest Du Deine Vorgehensweise mit dem folgenden PowerShell-Skript vergleichen, das die Aktualisierungen verwaltet?
    Windows Update PowerShell Module

    Unterscheidet sich das Ergebnis in diesem Fall von dem oben erwähnten?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 16. Januar 2015 13:18
  • Hi, ich sehe da zwei Probleme auf anhieb:

    - "Type" hat entweder den Wert 1 (Software) oder 2 (Driver), ist also numerisch. Trotzdem klappt das Filtern auch mit Type=1 nicht, scheint ein Bug zu sein. Ich würde alle runterladen die "IsInstalled=0" sind und dann nachträglich auf das Property "Type" filtern. (z.b. mit where-object)

    - "MsrcSeverity" ist nicht geeignet um die Updatekategorie abzubilden. Unter Win 8.1 getestet ist das Feld immer leer. Unter Win 2008 R2 getestet, nicht immer, aber doch zu 40%. Alternativ gibts es auf den ersten Blick nur "BrowseOnly=0". Findet laut Msdn "updates that are not considered optional". Müsstest du mal testen.

    Und dann, nicht wirklich ein Fehler, aber du kannst dir das Aufzählen der einzelnen Updates vereinfachen, in dem du foreach benutzt:

     
    foreach ($item in $SearchResult.updates) { 
    	
    }
      

    Grüße, Denniver




    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 20. Januar 2015 14:32
    Moderator