2014-09-04 58 views
0

我需要打印一些例外到屏幕/登錄文件。讓最後一個例外從最後一個powershell執行

有沒有辦法讓所有由上次腳本執行導致的異常? 認爲這是一個例子:

  • 我打開PowerShell窗口
  • 我exceute abc.ps1,它會拋出一些錯誤。
  • 我現在執行xyz.ps1,它引發多個異常。現在我只想記錄來自xyz.ps1的所有異常。

如果我使用$error[0],我只得到最後一個例外。我還需要xyz.ps1拋出的其他異常

+0

您應該考慮改爲使用try/catch執行正確的錯誤處理 – 2014-09-04 10:35:20

+0

Noah說,如果您需要捕捉腳本中的特定錯誤,請使用try catch獲取並記錄它們。 – 2014-09-04 15:29:55

+0

Noah and Dane我明白最好的方法是在try catch塊中捕獲特定的異常,但問題是我們有很多powershell,並且已經寫好了,所以我只是想以上述方式登錄。捕獲包裝器powershell腳本(和底層cmdlet,腳本)產生的所有異常並將它們記錄在文件中。 – 2014-09-04 17:17:29

回答

0

我想我已經想出了這樣做的方法。如果使用Get-Member cmdlet($error[0] | Get-Member)檢查$ error [0]的屬性,則應該注意到名爲ScriptStackTrace的屬性。該屬性告訴我們錯誤是從腳本還是從控制檯引發的。用下面的代碼,我設法實現你問什麼:

for ($i=0;$i -lt $error.Count; $i++) 
{ if ($Error[$i].ScriptStackTrace -match "xyz.ps1") 
{ $error[$i] | out-file -Append "ErrorsScriptXYZ.txt" } } 

如果您打算使用腳本可調用的方式,將其添加爲執行的最後一行。請注意,它不會捕獲腳本運行之前可能發生的終止錯誤。探索Get-Member cmdlet以獲取更多想要操作的屬性。請注意,這隻會搜索當前變量會話中的錯誤,因爲下次啓動時錯誤消失了。