Anton
Anton

Reputation: 11340

-ErrorAction argument ignored in favor of $ErrorActionPreference

Both, $ErrorActionPreference variable and -ErrorAction cmdlet argument should define behavior for non-terminating errors.

Since variable is global and argument is specific to cmdlet invocation I expect that argument overrides variable. In fact, I can't find a situation, where -ErrorAction does anything at all.

$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. - I've found this question but it is more focused on related issue rather on priority.

Upvotes: 5

Views: 2725

Answers (1)

Χpẘ
Χpẘ

Reputation: 3451

The -ErrorAction parameter applies to errors generated by the command it is applied to. In the case of Invoke-Expression (iex) that means errors encountered while preparing to invoke the passed expression or errors encountered post processing the results. It doesn't, however, apply to the expression/command itself.

In the OP if you apply -ErrorAction to the Write-Error command you will get the expected results, whether or not you use iex.

Upvotes: 6

Related Questions