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 $_

        }

    }
}