使用"invoke-command"捕获命令的返回码 - Powershell 2

17 powershell return-value

我正在使用"invoke-command"在远程计算机上执行脚本.

invoke-command -computername <server_name> -scriptblock {command to execute the script}
Run Code Online (Sandbox Code Playgroud)

当有任何错误时,我的脚本返回"-1".所以,我想通过检查返回代码来确保脚本已成功执行.

我尝试如下.

$code = invoke-command -computername ....
Run Code Online (Sandbox Code Playgroud)

但它什么也没有回报.

Invoke-command捕获脚本块的返回码?

还有其他方法可以解决这个问题吗?

Joe*_*oey 10

我想如果你在另一台服务器上以这种方式运行命令,你就无法获得脚本的返回代码.这是因为Invoke-Command只需在远程计算机上运行一个命令,可能在一个临时会话中,您无法再次连接到该会话.

但是,您可以在远程计算机上创建会话并在该会话中调用脚本.之后,您可以再次检查该会话中的返回值.所以有些东西:

$s = New-PSSession -ComputerName <server_name>
Invoke-Command -Session $s -ScriptBlock { ... }
Invoke-Command -Session $s -ScriptBlock { $? }
Run Code Online (Sandbox Code Playgroud)

可能有用.这样,您可以访问Invoke-Command与远程计算机上的第一个相同的状态和变量.

Invoke-Command不太可能通过远程命令的返回值.你怎么知道Invoke-Command自己失败了?

ETA:好的,我误读了你的"返回代码".我假设你的意思$?.无论如何,根据文档,您可以在远程计算机上运行脚本,如下所示:

要在远程计算机上运行本地脚本,请使用 FilePath参数of Invoke-Command.

例如,以下命令Sample.ps1S1S2计算机上运行脚本:

invoke-command -computername S1, S2 -filepath C:\Test\Sample.ps1
Run Code Online (Sandbox Code Playgroud)

脚本的结果将返回到本地计算机.您不需要复制任何文件.