繁体   English   中英

如何从通过 CMD 调用的 PowerShell Start-Process 启动的进程中获取 ErrorLevel?

[英]How do I get the ErrorLevel from a process started via PowerShell Start-Process called from CMD?

我希望能够从此示例命令中获取 Process.exe 的 ErrorLevel:

C:\>PowerShell -NoP -C "Start-Process "C:\Process.exe""

如果 Process.exe 以 5 的 ErrorLevel 退出,我希望能够通过 CMD 捕获它,最好是在 %ErrorLevel% 变量中。 我对 PowerShell 不够熟练,无法做到这一点。

使用以下内容,假设C:\process.exe是一个控制台应用程序[1]

PowerShell -NoP -C "C:\Process.exe; exit $LASTEXITCODE"

注意:如果可执行文件路径包含空格,请将其括在'...'中; 如果它包含'本身,要么转义封闭'字符。 作为'' ,或将路径括在\"...\" (原文如此)中 - 请参阅此答案以获取更多信息。

为了获得进程的退出代码,您必须等待它终止。

Start-Process默认情况下不会等待终止,除非您添加-Wait开关 - 但是您还需要-PassThru才能返回进程信息 object 您需要通过exit报告其.ExitCode属性。

直接执行目标可执行文件,如上所示,(a) 导致开始的控制台应用程序[1]同步执行,以及 (b) 在自动变量$LASTEXITCODE变量中自动反映进程退出代码。

如果没有exit $LASTEXITCODE语句,进程的退出代码将映射到抽象的退出代码: 0 (成功)将按原样报告,但任何非零退出代码将映射到1 - 请参阅此帖子了解更多信息。

无论哪种方式, PowerShell的( powershell.exe的)退出代码将反映在cmd.exe的动态%ErrorLevel%变量中。


[1] 如果您的应用程序恰好是一个GUI子系统应用程序,您确实需要一个基于Start-Process的解决方案; 正如您自己在评论中指出的那样,解决方案是:
PowerShell -NoP -C "exit (Start-Process 'C:\Process.exe' -Wait -PassThru).ExitCode"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM