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。
廣告