[英]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.