Myślę, że jeśli uruchomisz polecenie w ten sposób na innym serwerze, nie ma możliwości uzyskania kodu powrotu skryptu. Jest tak, ponieważ Invoke-Command
po prostu uruchamia jedno polecenie na zdalnym komputerze, prawdopodobnie w ramach jednej sesji tymczasowej i nie można połączyć się z tą sesją ponownie.
To, co możesz może zrobić, to jednak utworzyć sesję na komputerze zdalnym i wywołać skrypt w tej sesji. Następnie możesz po prostu sprawdzić ponownie wartość zwrotu w tej sesji. Tak więc coś w rodzaju:
może działać. W ten sposób uzyskasz dostęp do tego samego stanu i zmiennych, co pierwszy Invoke-Command
na zdalnym komputerze.
Jest również mało prawdopodobne, aby przechodził przez wartość zwracaną przez polecenie zdalnego. Jak byś się domyślił, że to się nie udało?
ETA: Ok, źle odczytałem w odniesieniu do "kodu powrotnego". Zakładałem, że masz na myśli $?
. W każdym razie, zgodnie z dokumentacją można uruchomić skrypt na komputerze zdalnym, co następuje:
Aby uruchomić lokalną skryptu na zdalnych komputerach, użyj parametru Invoke-Command
FilePath
.
Na przykład, następujące polecenie uruchamia Sample.ps1
skrypt na komputerach S1
i S2
:
invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1
Wyniki scenariusza są zwracane do komputera lokalnego. Ty nie musisz kopiować żadnych plików.
Najdziwniejsze w Invoke-Command, gdy uruchomiony w kontekście Jenkins, kod powrotu jak to $ returnCode = Invoke-Command -file somescript.ps1 wróci każdy z somescript.ps1. jeśli został uruchomiony w oknach poleceń, zwracana wartość jest zwracana poprawnie. ktoś ma jakiś pomysł? – koo9
@ koo9: '$ returnCode' otrzyma _podsumowanie wyjścia_ pliku skryptu. Nie kod wyjścia. – Joey
podobno, ale podczas uruchamiania skryptu w ramach pracy Jenkins, jakikolwiek kod $ returncode wychwytuje wszystkie wyniki ze skryptu ps1 – koo9