What is this?

This knowledgebase contains questions and answers about PRTG Network Monitor and network monitoring in general.

Learn more

PRTG Network Monitor

Intuitive to Use. Easy to manage.
More than 500,000 users rely on Paessler PRTG every day. Find out how you can reduce cost, increase QoS and ease planning, as well.

Free Download

Top Tags


View all Tags

Rückgabewert wird nicht übernommen

Votes:

0

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

custom-sensor exitcode return-code

Created on Nov 2, 2017 2:39:23 PM

Last change on Nov 3, 2017 9:42:13 AM by  Stephan Linke [Paessler Support]



Best Answer

Accepted Answer

Votes:

0

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

Created on Nov 3, 2017 12:57:52 PM by  Stephan Linke [Paessler Support]

Last change on Nov 3, 2017 12:58:00 PM by  Stephan Linke [Paessler Support]



3 Replies

Votes:

0

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

Created on Nov 3, 2017 9:51:54 AM by  Stephan Linke [Paessler Support]



Votes:

0

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
   
}

Created on Nov 3, 2017 12:06:15 PM

Last change on Nov 3, 2017 12:45:15 PM by  Luciano Lingnau [Paessler]



Accepted Answer

Votes:

0

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

Created on Nov 3, 2017 12:57:52 PM by  Stephan Linke [Paessler Support]

Last change on Nov 3, 2017 12:58:00 PM by  Stephan Linke [Paessler Support]




Disclaimer: The information in the Paessler Knowledge Base comes without warranty of any kind. Use at your own risk. Before applying any instructions please exercise proper system administrator housekeeping. You must make sure that a proper backup of all your data is available.