众所周知,$ErrorActionPreference和$ErrorAction都具有相同的功能,并且都通过将“非终止错误”转换为“终止错误”来处理终止错误。但是,当同时使用两个变量时,我们需要知道哪个优先。
$ErrorActionPreference变量在脚本开始时使用,而$erroraction变量是公共参数并与cmdlet一起使用。在某些情况下,我们可能需要在发生错误后立即终止脚本,但是在脚本内部,我们有一些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在本文中未提及该命令。