2017-04-06 54 views
1

我想寫類似這樣的東西:如何讓Powershell引發函數內部生成的異常?

function Do-Something() { 
    Write-Host "Starting something" 
    Do-SomethingWhichThrowsAnException 
    Write-Host "Something completed successfully" 
} 

... 

function Process-Thing() { 
    try { 
    Do-OneThing 
    Do-TwoThing 
    Do-Something 
    Do-SomethingElse 
    } 
    catch { 
    Write-Host "Exception Caught!" 
    } 
} 

而且我得到以下輸出:「捕獲到異常」

Starting something 
{massive red exception text} 
Something completed successfully 

爲什麼我看不到?

爲什麼我會看到「某些東西已成功完成」?

是否Powershell只是而不是向堆棧或類似物拋出異常?

如果是這樣,是否有可能將它拍成提交?我必須嘗試/抓住我的每一個Do-XXXthing函數嗎?

+2

'$ ErrorActionPreference' – PetSerAl

+0

我沒有看到你已經運行了'Process-Thing'函數。 調用該函數。它正在捕捉錯誤。如果您希望我可以共享屏幕截圖,並確保檢查錯誤操作首選項 –

回答

1

入住此article

所以,如果我想趕上那發生的所有錯誤,我會趕上[System.Exception的],因爲這是所有錯誤的根源。這裏是Catch塊使用:

趕上[System.Exception的] {「捕捉到的異常」}

意識到接下來的事情是,如果我嘗試的東西,它不產生終止錯誤,無論如何它不會進入Catch塊。這是因爲$ ErrorActionPreference的默認值(發生錯誤時Windows PowerShell將執行的操作)是繼續執行下一個命令。

實際上,這意味着如果發生錯誤並且Windows PowerShell可以從中恢復,它將嘗試執行下一個命令。但它會讓你知道錯誤發生在控制檯上。

如果我想看到的,當非終止錯誤出現的Windows PowerShell會做,我看$ ErrorActionPreference變量相同的值,例如:

PS C:> $ ErrorActionPreference

繼續

...

所以,我的事情你應該的$ErrorActionPreference值更改爲Stop。檢查這個link關於如何在腳本中執行此操作的答案。

相關問題