Ich denke, wenn Sie einen Befehl so auf einem anderen Server ausführen, gibt es keine Möglichkeit, den Rückgabecode Ihres Skripts dort zu bekommen. Dies liegt daran, dass Invoke-Command
einfach einen Befehl auf dem Remotecomputer ausführt, wahrscheinlich innerhalb einer einzelnen temporären Sitzung, und Sie können keine Verbindung zu dieser Sitzung erneut herstellen.
Was Sie können tun, ist jedoch eine Sitzung auf dem Remote-Computer erstellen und rufen Sie Ihr Skript innerhalb dieser Sitzung. Danach können Sie einfach in dieser Sitzung erneut nach dem Rückgabewert suchen. Also etwas in der Art von:
$s = New-PSSession -ComputerName <server_name>
Invoke-Command -Session $s -ScriptBlock { ... }
Invoke-Command -Session $s -ScriptBlock { $? }
könnte funktionieren. Auf diese Weise erhalten Sie Zugriff auf den gleichen Status und die gleichen Variablen wie die erste Invoke-Command
auf dem Remote-Computer.
Auch Invoke-Command
ist sehr unwahrscheinlich, den Rückgabewert des Remote-Befehls zu übergeben. Wie würden Sie dann herausfinden, dass Invoke-Command
selbst fehlgeschlagen ist?
ETA: Ok, ich habe Sie in Bezug auf "Rückkehrcode" falsch gelesen. Ich nahm an, du meintest $?
. Wie auch immer, nach der Dokumentation können Sie ein Skript auf einem entfernten Computer laufen wie folgt:
Um eine lokale Skript auf Remote-Computer ausführen, verwenden Sie die FilePath
Parameter von Invoke-Command
.
Zum Beispiel der folgende Befehl führt die Sample.ps1
Skript auf den S1
und S2
Computer:
invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1
Die Ergebnisse des Skripts werden auf den lokalen Computer zurückgegeben. Sie müssen keine Dateien kopieren.
Seltsame in Invoke-Befehl, wenn im Jenkins Kontext ausgeführt wird, der Return-Code wie dieser $ Rückkehrcode = Invoke-Befehl -datei somescript.ps1 würde jeder von somescript.ps1 zurückzukehren. Wenn in einem Befehlsfenster ausgeführt wird, wird der Rückgabewert ordnungsgemäß zurückgegeben. Hat jemand eine Idee? – koo9
@ koo9: '$ returnCode' empfängt _pipeline output_ der Skriptdatei. Kein Exit-Code. – Joey
angeblich, aber wenn das Skript innerhalb des Jenkins-Jobs ausgeführt wird, fangen irgendwie $ returncode alle Ausgabe vom ps1-Skript ab – koo9