簡體   English   中英

檢測PowerShell腳本執行錯誤

[英]Detecting PowerShell script is executed with error

我有一個PowerShell腳本:

...
Any-Command -ErrorCode Stop
...

然后我從蝙蝠腳本中調用此腳本:

...
powershell myscript.ps1
...

現在,我想在bat腳本中知道調用的PowerShell腳本是否因錯誤而停止並且未到達腳本的末尾。 怎么做?

一種方法是在腳本中添加一個頂級陷阱語句,例如:

trap {
   exit 1; # or whatever error code
}

注意:trap可能被認為是老式的(盡管我最喜歡它),另一個選擇是圍繞整個腳本進行嘗試。

因此,當Any-Command異常退出時,將執行trap語句,並且腳本將以錯誤代碼1退出。如果不添加此代碼,Powershell將以錯誤代碼0退出(畢竟,Powershell運行得很好,盡管該腳本沒有)。

然后,您可以使用以下命令在bat腳本中檢測錯誤代碼:

powershell -noprofile -noninteractive -file <<your script>>

IF ERRORLEVEL 1 (echo ERROR) ELSE (echo OK)

pause

這將檢測到1或更高的任何錯誤代碼。

您也可以使用%ERRORLEVEL%但請注意,它可能會被環境變量覆蓋。

注意:如果要在嵌套運行空間中運行腳本,則可以考慮使用$host.SetShouldExit(1)來確保根主機也退出。

只需添加馬庫斯給出的答案

我注意到陷阱代碼甚至隱藏了實際錯誤。 就我而言,我需要發生實際錯誤。 只需添加修改后的代碼即可完成。

 trap 
    { 
        write-error $("Error: " + $_.Exception.Message); 
        exit 1; # or whatever error code 
    } 

有關更多信息, 訪問http://huddledmasses.org/trap-exception-in-powershell/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM