錯誤型別

錯誤是一個錯誤,人們可能想知道它中是否有型別。好吧,使用 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"