我的主管在工作时表示总是在catch块中使用ErrorAction -Continue
:
workflow foo {
try {
Get-CimInstance -ClassName Win32_Product | ? {$_.Vendor -eq 'Google Inc.'}
}
catch {
Write-Error "Something went wrong." -ErrorAction Continue
Throw
}
}
在这里使用-EA Continue
有什么好处?它没有用处 - 接下来执行throw并终止脚本。
在功能和工作流程中。我的主管是否正确?
答案 0 :(得分:1)
我认为-EA Continue
在这种情况下与Write-Error
一起使用,以确保即使作用域的Throw
更改为$ErrorActionPreference
,也会执行以下Stop
$ErrorActionPreference
。
现在,至少是函数中的行为。
工作流程似乎有所不同。我正在测试您的示例,Stop
设置为1/0
并try
阻止$ErrorActionPreference = 1
workflow foo
{
try
{
1/0
}
catch
{
Write-Error "Something went wrong." -ErrorAction Continue
Throw
}
}
以创建例外:
-EA Continue
无论Throw
在$ErrorActionPreference
之前的行中是否-EA
在这种情况下都没有被规定。因此,工作流中的$ErrorActionPreference = 1
function bar
{
try
{
1/0
}
catch
{
Write-Error "Something went wrong." -ErrorAction Continue
Throw
}
}
似乎会覆盖由-ErrorAction Continue
参数完成的任何每cmdlet设置。
正如我所说,这种行为与功能不同:
Throw
此处$ErrorActionPreference
与正在执行的SilentlyContinue
不同。
顺便说一句:如果您还想考虑Throw
设置为Write-Error $_ -EA Continue
(并且您没有使用工作流程)的情况,那么您可能想要替换Throw
使用-EA
,否则您的$ErrorActionPreference
会默默地继续。
简而言之:如果您的想法与当前Throw
无关,那么{{1}}参数似乎在您的工作流示例中无效。在函数中它是有意义的,但在这种情况下,也应该避免使用{{1}}语句。