執行我有一個PowerShell的腳本:檢測PowerShell腳本將以錯誤
...
Any-Command -ErrorCode Stop
...
然後我把這個腳本從蝙蝠腳本:
...
powershell myscript.ps1
...
現在我想知道在蝙蝠腳本如果被叫的PowerShell腳本停止在錯誤和沒有達到劇本的結尾。怎麼做?
執行我有一個PowerShell的腳本:檢測PowerShell腳本將以錯誤
...
Any-Command -ErrorCode Stop
...
然後我把這個腳本從蝙蝠腳本:
...
powershell myscript.ps1
...
現在我想知道在蝙蝠腳本如果被叫的PowerShell腳本停止在錯誤和沒有達到劇本的結尾。怎麼做?
一種方式做這將是一個頂級的陷阱語句添加到您的腳本中,這樣的:
trap {
exit 1; # or whatever error code
}
注:陷阱可以被認爲是老土(儘管我喜歡它的頂層)另一種選擇是圍繞你的整個腳本進行嘗試。
因此,當Any-Command退出併產生異常時,將執行陷阱語句並退出錯誤代碼爲1的腳本。如果不添加此項,Powershell將以錯誤代碼0退出(所有Powershell運行完好,儘管劇本沒有)。
然後,您可以使用類似的檢測錯誤代碼蝙蝠腳本:
powershell -noprofile -noninteractive -file <<your script>>
IF ERRORLEVEL 1 (echo ERROR) ELSE (echo OK)
pause
這將檢測到的1或更高版本的任何錯誤代碼。
您還可以使用%ERRORLEVEL%
但要注意,這可能會被改寫爲環境變量。
注意:如果你在一個嵌套的運行空間運行腳本,你可以考慮使用$host.SetShouldExit(1)
,確保根主機退出爲好。
作品。非常感謝你! – alexey
只是增加了由Marcus
給出了答案,我注意到陷阱代碼甚至隱藏實際的錯誤。在我的情況下,我需要發生的實際錯誤。只需添加修改後的代碼即可完成。在http://huddledmasses.org/trap-exception-in-powershell/
更多信息是'%ERRORLEVEL%'設置?是否使用'返回'在與PowerShell的結束* *> 0的幫助? –
Richard