Я думаю, что если вы запустите команду на другом сервере, вы не сможете получить код возврата своего сценария там. Это связано с тем, что Invoke-Command
просто запускает одну команду на удаленном компьютере, возможно, в течение одного временного сеанса, и вы не можете снова подключиться к этому сеансу.
Что вы делаете может, однако, создает сеанс на удаленном компьютере и вызывает ваш скрипт в этом сеансе. После этого вы можете снова проверить возвращаемое значение в этом сеансе. Так что что-то вроде:
$s = New-PSSession -ComputerName <server_name>
Invoke-Command -Session $s -ScriptBlock { ... }
Invoke-Command -Session $s -ScriptBlock { $? }
может работать. Таким образом, вы получаете доступ к тому же состоянию и переменным, что и первый Invoke-Command
на удаленном компьютере.
Также Invoke-Command
вряд ли пройдет через возвращаемое значение удаленной команды. Как бы вы тогда выяснили, что сам Invoke-Command
не удалось?
ETA: Хорошо, я неправильно вас понял относительно «кода возврата». Я предполагал, что вы имели в виду $?
. Во всяком случае, в соответствии с документацией вы можете запустить скрипт на удаленном компьютере следующим образом:
Чтобы запустить локальный скрипт на удаленных компьютерах, используйте FilePath
параметр Invoke-Command
.
Например, следующая команда запускает скрипт Sample.ps1
на S1
и S2
компьютеров:
invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1
Результаты сценария возвращаются на локальный компьютер. Вам не нужно копировать файлы.
странность в Invoke-команды при работе в контексте Дженкинс, код возврата, как этот $ = код возврата Invoke-команда -file somescript.ps1 вернется каждый из somescript.ps1. если он запускается внутри окон команд, возвращаемое значение возвращается правильно. у кого есть идея? – koo9
@ koo9: '$ returnCode' получит _pipeline output_ файла сценария. Не код выхода. – Joey
предположительно, но при запуске скрипта в задании Jenkins, как-то $ returncode улавливает весь вывод из сценария ps1 – koo9