Question:
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$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.
Answer:
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
.