簡體   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