Behandeln Sie Fehler in ScriptBlock in Invoke-Command-Cmdlet

8

Ich versuche, einen Dienst auf einem Remote-Computer mit der Powershell zu installieren.

Bisher habe ich Folgendes:

%Vor%

Wenn beim Ausführen von New-Service ein Fehler auftritt, wird $ errortext ErrorVariable im ScriptBlock richtig gesetzt, weil der Text: "Fehler in: zeigt mir den Fehler.

Die ErrorVariable des Invoke-Commands wird nicht gesetzt (was ich erwartet habe).

Meine Frage ist:

Ist es irgendwie möglich, die ErrorVariable des Invoke-Command auf den Fehler im ScriptBlock zu setzen?

Ich weiß, dass ich auch InstalUtil, WMI und SC verwenden kann, um den Dienst zu installieren, aber das ist im Moment nicht relevant.

    
flayn 26.09.2012, 11:41
quelle

3 Antworten

16

Nein, Sie können nicht das Errorvariable aus dem Invoke-Command -Aufruf auf den gleichen Wert setzen wie im Skriptblock.

Aber wenn Ihr Ziel ist, "Fehler im Skriptblock zu erkennen und zu behandeln, und auch Fehler in den Kontext des% code% Aufrufers zurück zu bekommen", dann tun Sie es einfach manuell:

%Vor%

Invoke-Command enthält jetzt die Fehlerinformationen.

    
latkin 26.09.2012, 20:01
quelle
8

Die Invoke-Command-Argumentliste ist eine einseitige Lösung. Sie können die Fehlervariable im Skript z. in der letzten Zeile des Skriptblocks put:

%Vor%

oder noch besser, erfassen Sie den Fehler einfach nicht über die -ErrorVariable. Die Ausgabe des Skriptblocks, einschließlich der Fehler, wird auch über eine Remoteverbindung an den Anrufer weitergeleitet.

%Vor%

Im Allgemeinen denke ich, dass es viel besser ist, Fehler im Fehlerstrom zu behalten, getrennt von der normalen Ausgabe.

    
Keith Hill 26.09.2012 13:44
quelle
0

Im engeren Sinne glaube ich, dass die Antwort nein ist. Sie können die ErrorVariable von Invoke-Command nicht auf den Inhalt der ErrorVariable innerhalb des Skriptblocks setzen. Die ErrorVariable gilt nur für den Befehl, an den sie angehängt ist.

Sie können die Variable im Skriptblock jedoch an den Bereich von Invoke-Command übergeben. In Ihrem Code führen Sie Ihren New-Service-Befehl mit -ErrorVariable errortext aus. Erstellen Sie Ihre Variable stattdessen im Bereich "script", indem Sie den Variablennamen mit "script:" voranstellen: -ErrorVariable script:errortext . Dadurch wird die Variable sowohl außerhalb des Skriptblocks als auch innerhalb des Skriptblocks verfügbar gemacht.

Nun wird Ihre letzte Zeile Write-Host("Error out: " + $errortext) den Fehler ausgeben, der innerhalb des Skriptblocks generiert wurde.

Weitere Informationen hier und hier .

    
Todd Walton 27.06.2017 15:15
quelle