$ErrorActionPreference
变量和-ErrorAction
cmdlet参数都应定义non-terminating errors的行为。
由于变量是全局的,并且参数特定于cmdlet调用,因此我希望该参数覆盖变量。事实上,我无法找到一种情况,-ErrorAction
可以做任何事情。
$expression = 'Write-Error "non-terminating error"'
# No exception
$ErrorActionPreference = 'Continue'
Invoke-Expression -Command $expression
# Exception
$ErrorActionPreference = 'Stop'
Invoke-Expression -Command $expression
# No exception, why?
$ErrorActionPreference = 'Continue'
Invoke-Expression -Command $expression -ErrorAction Stop
# Exception, why?
$ErrorActionPreference = 'Stop'
Invoke-Expression -Command $expression -ErrorAction Continue
P.S。 - 我发现了this question,但它更侧重于相关问题而非优先级。
答案 0 :(得分:5)
-ErrorAction
参数适用于由其应用的命令生成的错误。在Invoke-Expression (iex)
的情况下,这意味着在准备调用传递的表达式时遇到错误或在处理结果时遇到错误。但是,它并不适用于表达式/命令本身。
在OP中,如果您将-ErrorAction
应用于Write-Error
命令,您将获得预期的结果,无论您是否使用iex
。