-ErrorAction参数被忽略,有利于$ ErrorActionPreference

时间:2016-02-09 11:49:51

标签: powershell error-handling

$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,但它更侧重于相关问题而非优先级。

1 个答案:

答案 0 :(得分:5)

-ErrorAction参数适用于由其应用的命令生成的错误。在Invoke-Expression (iex)的情况下,这意味着在准备调用传递的表达式时遇到错误或在处理结果时遇到错误。但是,它并不适用于表达式/命令本身。

在OP中,如果您将-ErrorAction应用于Write-Error命令,您将获得预期的结果,无论您是否使用iex