win_exec_wrapper - Be more defensive when trying to get output errors (#62376)
* win_exec_wrapper - Be more defensive when trying to get output errors * Fix up property search
This commit is contained in:
parent
bf5b6695ec
commit
bad338aca6
2 changed files with 36 additions and 4 deletions
2
changelogs/fragments/win_exec-error.yaml
Normal file
2
changelogs/fragments/win_exec-error.yaml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- win_exec_wrapper - Be more defensive when it comes to getting unhandled exceptions
|
|
@ -128,8 +128,22 @@ try {
|
||||||
} catch {
|
} catch {
|
||||||
# uncaught exception while executing module, present a prettier error for
|
# uncaught exception while executing module, present a prettier error for
|
||||||
# Ansible to parse
|
# Ansible to parse
|
||||||
Write-AnsibleError -Message "Unhandled exception while executing module" `
|
$error_params = @{
|
||||||
-ErrorRecord $_.Exception.InnerException.ErrorRecord
|
Message = "Unhandled exception while executing module"
|
||||||
|
ErrorRecord = $_
|
||||||
|
}
|
||||||
|
|
||||||
|
# Be more defensive when trying to find the InnerException in case it isn't
|
||||||
|
# set. This shouldn't ever be the case but if it is then it makes it more
|
||||||
|
# difficult to track down the problem.
|
||||||
|
if ($_.Exception.PSObject.Properties.Name -contains "InnerException") {
|
||||||
|
$inner_exception = $_.Exception.InnerException
|
||||||
|
if ($inner_exception.PSObject.Properties.Name -contains "ErrorRecord") {
|
||||||
|
$error_params.ErrorRecord = $inner_exception.ErrorRecord
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-AnsibleError @error_params
|
||||||
$host.SetShouldExit(1)
|
$host.SetShouldExit(1)
|
||||||
return
|
return
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -140,8 +154,24 @@ try {
|
||||||
# other types of errors may not throw an exception in Invoke but rather just
|
# other types of errors may not throw an exception in Invoke but rather just
|
||||||
# set the pipeline state to failed
|
# set the pipeline state to failed
|
||||||
if ($ps.InvocationStateInfo.State -eq "Failed" -and $ModuleName -ne "script") {
|
if ($ps.InvocationStateInfo.State -eq "Failed" -and $ModuleName -ne "script") {
|
||||||
Write-AnsibleError -Message "Unhandled exception while executing module" `
|
$reason = $ps.InvocationStateInfo.Reason
|
||||||
-ErrorRecord $ps.InvocationStateInfo.Reason.ErrorRecord
|
$error_params = @{
|
||||||
|
Message = "Unhandled exception while executing module"
|
||||||
|
}
|
||||||
|
|
||||||
|
# The error record should always be set on the reason but this does not
|
||||||
|
# always happen on Server 2008 R2 for some reason (probably memory hotfix).
|
||||||
|
# Be defensive when trying to get the error record and fall back to other
|
||||||
|
# options.
|
||||||
|
if ($null -eq $reason) {
|
||||||
|
$error_params.Message += ": Unknown error"
|
||||||
|
} elseif ($reason.PSObject.Properties.Name -contains "ErrorRecord") {
|
||||||
|
$error_params.ErrorRecord = $reason.ErrorRecord
|
||||||
|
} else {
|
||||||
|
$error_params.Message += ": $($reason.ToString())"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-AnsibleError @error_params
|
||||||
$host.SetShouldExit(1)
|
$host.SetShouldExit(1)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue