錯誤型別
錯誤是一個錯誤,人們可能想知道它中是否有型別。好吧,使用 PowerShell,錯誤大致分為兩個標準,
- 終止錯誤
- 非終止錯誤
正如名稱所示,終止錯誤將終止執行,非終止錯誤讓執行繼續執行下一個語句。
假設 $ ErrorActionPreference 值是預設值(Continue) ,這是事實。 $ ErrorActionPreference 是一個 Prefrence 變數 ,它告訴 powershell 在出現非終止錯誤時該怎麼做。
終止錯誤
可以使用典型的 try catch 處理終止錯誤,如下所示
Try
{
Write-Host "Attempting Divide By Zero"
1/0
}
Catch
{
Write-Host "A Terminating Error: Divide by Zero Caught!"
}
上面的程式碼片段將執行,錯誤將通過 catch 塊捕獲。
非終止錯誤
另一方面,非終止錯誤預設情況下不會在 catch 塊中捕獲。其背後的原因是非終止錯誤不被視為嚴重錯誤。
Try
{
Stop-Process -Id 123456
}
Catch
{
Write-Host "Non-Terminating Error: Invalid Process ID"
}
如果執行上面的行,則不會從 catch 塊獲取輸出,因為錯誤不被認為是關鍵的,執行只會從下一個命令繼續執行。但是,錯誤將顯示在控制檯中。要處理非終止錯誤,你只需更改錯誤首選項即可。
Try
{
Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
"Non-Terminating Error: Invalid Process ID"
}
現在,使用更新的錯誤首選項,此錯誤將被視為終止錯誤,並將在 catch 塊中捕獲。
呼叫終止和非終止錯誤:
Write-Error cmdlet 只是將錯誤寫入呼叫主機程式。它不會停止執行。凡為扔會給你一個終止錯誤,並停止執行
Write-host "Going to try a non terminating Error "
Write-Error "Non terminating"
Write-host "Going to try a terminating Error "
throw "Terminating Error "
Write-host "This Line wont be displayed"