Hallo zusammen,
ich habe ein Windows-Update Skript in abgespeckter Version was genauso abgespeckt funktioniert, denn sonst würde ich hier nicht schreiben :-P
Mein Wunsch: Nachfrage der Anzahl von Windows-Updates auf dem Server X und Rückgabe dessen. Wenn der Server 0 Updates ausstehend hat, gibt er ein grünes OK zurück. Wenn er welche ausstehend hat, soll er die Anzahl zurückgeben und es als Warnung aufzeigen.
Was macht er wirklich? Er fragt den Server ab und gibt auch ein grünes OK bei 0 aus. Allerdings, ignoriert er meine Exit-Codes wenn er Updates hat. Aktuell habe ich einen Server mit 7 ausstehenden Updates. Meine Rückgabe lautet Write-Host $Val:Updates. Er gibt die 7 auch zurück, allerdings zeigt er grün "Updates" an. Wenn ich hier mit Grenzwerten arbeite, wechselt er auch in eine Warnung bzw. Fehler..
Das würde mir auch reichen, wenn die Ausgabe dann nicht : "7 Updates steht über dem Grenzwert von 0 Updates etc." anzeigen würde.
Wie kann ich das korrigieren? Vielen lieben Dank :)
Anbei mein Skript.
param( [string]$SRV ="", [string]$UserName="", [string]$Password="" ) # Zugangsdaten erstellen und verschlüsseln $SecPasswd = ConvertTo-SecureString $Password -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential ($UserName, $SecPasswd) # PowerShell-Remoting-Aufruf zu dem Rechner Invoke-Command -Computer $SRV -ScriptBlock { # Festlegung des COM-Objekts in Variable $Searcher = New-Object -ComObject Microsoft.Update.Searcher # Festlegung der Kriterien und Suche $Criteria = "IsInstalled=0 and Type='Software'" $SearchResult = $Searcher.Search($Criteria).Updates $Val = $SearchResult.Count if($Val -le 0){ Write-Host 0:OK exit 0 } else { Write-Host $Val:Updates exit 1 } } -Credential $Cred
Article Comments
Hey,
vielen lieben Dank für die Information. Nun bin ich sehr neu im Thema Powershell und versuche mir also auch noch vieles selber anzueignen. Google und Paessler sei Dank ;-)
Ich habe nun also verstanden das der Invoke-Block nur remote auf der abgefragten Maschine "vorhanden ist" und die Werte ins lokale Skript zur Prüfung übergeben werden müssen. Nun weiß ich aber nicht wie ich das sicherstellen kann? Vielleicht hab ich da einen Knoten den ich logisch noch nicht gelöst bekomme.
Meine Skriptversuche sind aktuell folgende... Ich baue eine Session auf und setze den Invoke-Command in eine Variable $Uebergabe. Woher weiß der Befehl aber welche Variable ich nun darin stehen haben will? Aktuell gibt er mir auch keinen Wert zurück. Was muss ich also ändern damit ich später $SearchResult.Count zur Überprüfung in einer IF-Abfrage verwenden kann?
Vielen lieben Dank und liebste Grüße,
Manu
Skriptausschnitt
$Session = New-PSSession -Credential $Cred $Uebergabe = Invoke-Command -Session $Session -ScriptBlock { # Festlegung des COM-Objekts in Variable $Searcher = New-Object -ComObject Microsoft.Update.Searcher # Festlegung der Kriterien und Suche $Criteria = "IsInstalled=0 and Type='Software'" $SearchResult = $Searcher.Search($Criteria).Updates }
Nov, 2017 - Permalink
Hallo Frau Duarte,
Folgendes sollte funktionieren:
$Session = New-PSSession -Credential $Cred $Uebergabe = Invoke-Command -Session $Session -ScriptBlock { # Festlegung des COM-Objekts in Variable $Searcher = New-Object -ComObject Microsoft.Update.Searcher # Festlegung der Kriterien und Suche $Criteria = "IsInstalled=0 and Type='Software'" $SearchResult = $Searcher.Search($Criteria).Updates return $SearchResult; }
$Übergabe sollte nun ein Objekt-Array mit den Updates sein, über das iteriert werden kann. Auch die Eigenschaft Count sollte mittels $Übergabe.Count vorhanden sein.
Mit freundlichen Grüßen,
Stephan Linke, Tech Support Team
Nov, 2017 - Permalink
Hallo Frau Duarte,
Das Problem liegt hier darin, dass exit nur auf dem Zielhost ausgeführt wird, nicht aber da, wo das Script ursprünglich gestartet wurde. Am besten das Ergebnis in eine globale Variable packen und dann ausserhalb des Invoke-Command-Blocks vergleichen und entsprechend quittieren :) Dann sollte es auch mit dem Status keine Probleme mehr geben.
Mit freundlichen Grüßen,
Stephan Linke, Tech Support Team
Nov, 2017 - Permalink