2012-11-18 70 views
2

執行我有一個PowerShell的腳本:檢測PowerShell腳本將以錯誤

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

然後我把這個腳本從蝙蝠腳本:

... 
powershell myscript.ps1 
... 

現在我想知道在蝙蝠腳本如果被叫的PowerShell腳本停止在錯誤和沒有達到劇本的結尾。怎麼做?

+1

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

更多信息是'%ERRORLEVEL%'設置?是否使用'返回'在與PowerShell的結束* *> 0的幫助? – Richard

回答

4

一種方式做這將是一個頂級的陷阱語句添加到您的腳本中,這樣的:

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),確保根主機退出爲好。

+0

作品。非常感謝你! – alexey