在PowerShell脚本块中返回批处理文件的退出代码

3
我正尝试通过一行PowerShell命令远程调用一个批处理文件,如下所示:
PowerShell -ExecutionPolicy UnRestricted invoke-command -ComputerName Server1 -ScriptBlock {cmd.exe /c "\\server1\d$\testPath\test.bat"}

我想做的是将test.bat文件中的任何退出代码返回给我的命令。 有人能给我一个如何实现这个目标的想法吗?

(顺便说一句,由于多种原因,我不能使用PSExec)。

谢谢


.bat文件中有一个条件退出。根据过程中发生的情况,退出可能被设置为任意数量的代码(在5000到5999范围内)。如果满足任何失败条件,则.bat的最后一行是exit _nnnn_,如果一切正常,则为exit 0 - Ash
1个回答

3

您应该可以通过自动变量$LASTEXITCODEcmd.exe获取退出代码。

如果您只对此感兴趣,而不关心批处理文件的任何输出,您可以将脚本块更改为:

{cmd.exe /c "\\server1\d$\testPath\test.bat" *> $null; return $LASTEXITCODE}

如果您已经在运行PowerShell,那么无需再次调用powershell,只需在远程计算机上建立会话并将Invoke-Command附加到它即可:

$session = New-PSSession remoteComputer.domain.tld
$ExitCode = Invoke-Command -Session $session -ScriptBlock { cmd /c "\\server1\d$\testPath\test.bat" *> $null; return $LASTEXITCODE }
$ExitCode # this variable now holds the exit code from test.bat

好的,我想要做的是将 $LASTEXITCODE 冒泡回调用命令,这样我就可以使用该代码退出进程并返回到调用命令。尽管如上所述,我仍然得到了零进程退出代码。 - Ash
好的,我已经弄清楚了如何将它作为一行代码冒泡到顶部的方法:powershell -ExecutionPolicy UnRestricted; $var = "& invoke-command -ComputerName Server1 -ScriptBlock {cmd.exe /c '\\Server1\d$\testPath\test.bat' *> $null; return $LASTEXITCODE}"; exit $var。谢谢你的帮助。它确实指引我朝着正确的方向前进。 - Ash
如果您需要输出结果怎么办? - Robert Ivanc
在脚本块内部构建一个对象(使用New-Object或等效方法)? - Mathias R. Jessen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接