PowerShell 中 $ErrorActionPreference 和 $ErrorAction cmdlet 有什麼區別?


我們知道 **$ErrorActionPreference** 和 **$ErrorAction** 都有相同的功能,並且都用於透過將 **非終止** 錯誤轉換為 **終止** 錯誤來處理終止錯誤。但是,當這兩個變數都使用時,我們需要知道哪個優先。

**$ErrorActionPreference** 變數用於指令碼的開頭,而 **$erroraction** 變數是一個通用引數,並與 cmdlet 一起使用。在某些情況下,我們可能需要指令碼在發生錯誤時立即終止,但在指令碼內部,我們有一些 cmdlet 需要忽略或繼續執行,如果發生錯誤。在這種情況下,**-ErrorAction** 非常重要,並且它具有優先順序。

示例

$ErrorActionPreference = "Stop"
try{
   Get-Service -Name ABC
   Get-Process powershell
   Get-Process chromesds
   Get-Service Spooler
}
catch{
   $_.Exception.Message
}

輸出

Cannot find any service with service name 'ABC'.

在上面的示例中,指令碼被終止,因為服務名稱 **ABC** 不存在,因此,由於 **$ErrorActionPreference** 值設定為 **Stop**,因此後續命令無法執行。一旦我們在 **Get-Service** 命令中添加了 **-ErrorAction**,它將具有優先順序。

$ErrorActionPreference = "Stop"
try{
   Get-Service -Name ABC -ErrorAction Continue
   Get-Process powershell
   Get-Process chromesds
   Get-Service Spooler
}
catch{
   $_.Exception.Message
}

輸出

Line |
   4 |       Get-Service -Name ABC -ErrorAction Continue
     |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find any service with service name 'ABC'.
NPM(K)    PM(M)    WS(M)    CPU(s)    Id    SI    ProcessName
------    -----    -----    ------    --    --    -----------
43       234.39    11.33    49.17    7668    1    powershell
Cannot find a process with the name "chromesds". Verify the process name and call
the cmdlet again.

一旦我們在帶有 Continue 值的 -ErrorAction 引數中添加了它,執行將移動到下一條命令,如上面的輸出所示,並在找不到程序名稱“Chromesds”時停止,並且無法執行下一條命令,因為在該命令中沒有提到 -ErrorAction。

更新於: 2020年9月3日

820 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告