private/StatusMessage/Set-AutoGeneratedExceptionMessage.ps1
|
function Set-AutoGeneratedExceptionMessage { <# .DESCRIPTION If the type of status message is 'exception' and an object of type 'ErrorRecord' is included generate a standardized error message. #> [OutputType([HashTable])] [CmdletBinding()] param ( [Parameter(Mandatory,ValueFromPipeline)] [HashTable] $MessageObject ) process { try { if ( $MessageObject.Type -eq 'Exception' ) { if ( $MessageObject.DebugObject ) { if ( $MessageObject.DebugObject.GetType().Name -eq 'ErrorRecord' ) { $exceptionTemplate = [System.Environment]::NewLine + $( 'Exception Error:' ) + [System.Environment]::NewLine + $(' Function: {0}, line: {1}' ) + [System.Environment]::NewLine + $(' Error Message: {2}' ) + [System.Environment]::NewLine + $(' Code Statement: {3}' ) + [System.Environment]::NewLine + $(' Stack Trace: {4}' ) + [System.Environment]::NewLine + $(' PowerShell: {5} {6} on {7}') $errorStatement = $MessageObject.DebugObject.InvocationInfo.Statement ?? $MessageObject.DebugObject.InvocationInfo.Line ?? '<Not available>' $stackMsg = $MessageObject.DebugObject.ScriptStackTrace -split [System.Environment]::NewLine $stackMsg = $stackMsg -join ([System.Environment]::NewLine + ' ') $stackMsg = [System.Environment]::NewLine + ' ' + $stackMsg $exceptionMessage = $exceptionTemplate -f $MessageObject.TargetFunctionName, $MessageObject.DebugObject.InvocationInfo.ScriptLineNumber, $MessageObject.DebugObject.Exception.Message, $($errorStatement.ToString().Trim()), $stackMsg, $PSVersionTable.PSVersion.ToString(), $PSVersionTable.PSEdition, $PSVersionTable.Platform $MessageObject.Message += $exceptionMessage $MessageObject.DebugObject = $null } } } Write-Output $MessageObject } catch { Write-ExceptionMessage -e $_ } } } |