如何使用Invoke-Command处理远程错误

时间:2014-03-17 20:37:26

标签: windows powershell powershell-remoting

我有以下代码:

Invoke-Command -ComputerName  $remoteComputerName -Credentials $cred {& c:/program.exe}

如何从program.exe返回rc作为Invoke-Command返回码,特别是当它非零时。?

3 个答案:

答案 0 :(得分:1)

默认情况下,Invoke-Command将传回脚本的结果。如果您没有发回任何其他数据,您可以随时执行以下操作:

Invoke-Command -ComputerName  $remoteComputerName -Credentials $cred {& c:/program.exe;$lastexitcode}

这应该返回您尝试运行的任何应用程序的退出代码。

答案 1 :(得分:0)

作为TheMadTechnician所说的扩展,您可以将远程计算机中发生的事情插入到PowerShell对象中,您甚至可以使用try {} catch {}将其包装起来,或者只返回$? (与 $ LASTEXITCODE 相同)并将其传递回脚本:

$rc_oporation = Invoke-Command -ComputerName  $remoteComputerName -Credentials $cred {& c:/program.exe; $?}

$rc_other_option = Invoke-Command -ComputerName  $remoteComputerName -Credentials $cred { try{& c:/program.exe} catch{"there was a problem"}  }

现在" $ rc_oporation"将保留你的答案为0表示没有错误的成功

希望有所帮助:)

答案 2 :(得分:0)

在上述之前,我得到了以下工作(感谢themadtechnician):

$s = New-PSSession -Name autobuild -ComputerName <ip address> -Credential $cred

Invoke-Command -Session $s -ScriptBlock {& 'C:\program.exe'}
$rc = Invoke-Command -Session $s -ScriptBlock {$lastexitcode}
if ($rc -ne 0)
{
    write-output "run failed ..."
    Remove-PSSession -Name autobuild
    exit 1
}
else
{
    write-output "run complete ..."
    Remove-PSSession -Name autobuild
    exit 0
}