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.
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.
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.
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.
Tags und Links powershell error-handling invoke-command