Public/Get-ErrorInfo.ps1

using namespace System.Management.Automation

$BackupErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = [ActionPreference]::Stop
Set-StrictMode -Version Latest

function Get-ErrorInfo {
    <#
        .SYNOPSIS
        Analysiert aufgetretene Fehler, um diese z.B. im try/catch-Block zu behandeln.
 
        .EXAMPLE
        Get-ErrorInfo ; Get-ChildItem -Path ./NoRealDirectory # throw Error
    #>

    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline = $true)]
        [ValidateScript({
            if ($_ -is [ErrorRecord] -or $_ -is [Exception]) {
                return $true
            } else {
                throw 'Es können nur [ErrorRecord]- und [Exception]-Objekte analysiert werden.'
            }
        })]
        [ValidateNotNullOrEmpty()]
        [System.Object]$InputObject = $Error[0]
    )

    begin {
        $My = [HashTable]::Synchronized(@{})
        $My.ErrorCounter = 0
    }

    process {
        $My.ToAnalyseErrorRecord = $InputObject
        if($null -eq $My.ToAnalyseErrorRecord) {
            throw 'Es ist kein Error-Objekt in $Error vorhanden.'
        }

        if($My.ToAnalyseErrorRecord -is [Exception]) {
            $My.ToAnalyseErrorRecord = $My.ToAnalyseErrorRecord.ErrorRecord
        }

        $My.ErrorCounter++
        $My.ESC = [char]0x1b
        "$($My.ESC)[1;4mAnalyse Error $($My.ErrorCounter)$($My.ESC)[!p" | Write-Output
        " Exception : $($My.ESC)[91m$($My.ToAnalyseErrorRecord.Exception.GetType().FullName)$($My.ESC)[0m" | Write-Output
        " Exception.Message : $($My.ToAnalyseErrorRecord.Exception.Message)" | Write-Output
        " FullyQualifiedErrorId : $($My.ESC)[96m$($My.ToAnalyseErrorRecord.FullyQualifiedErrorId)$($My.ESC)[0m" | Write-Output
        " CategoryInfo : Category: $($My.ESC)[92m$($My.ToAnalyseErrorRecord.CategoryInfo.Category)$($My.ESC)[0m Activity: $($My.ESC)[92m$($My.ToAnalyseErrorRecord.CategoryInfo.Activity)$($My.ESC)[0m Reason: $($My.ESC)[92m$($My.ToAnalyseErrorRecord.CategoryInfo.Reason)$($My.ESC)[0m TargetName: $($My.ESC)[92m$($My.ToAnalyseErrorRecord.CategoryInfo.TargetName)$($My.ESC)[0m TargetType: $($My.ESC)[92m$($My.ToAnalyseErrorRecord.CategoryInfo.TargetType)$($My.ESC)[0m" | Write-Output

        if(-not $null -eq $My.ToAnalyseErrorRecord.Exception.InnerException) {
            " InnerException : $($My.ESC)[91m$($My.ToAnalyseErrorRecord.Exception.InnerException.GetType().FullName)$($My.ESC)[0m" | Write-Output
            " $($My.ToAnalyseErrorRecord.Exception.InnerException.Message)" | Write-Output
            if(-not $null -eq $My.ToAnalyseErrorRecord.Exception.InnerException.InnerException) {
                " InnerException: $($My.ESC)[91m$($My.ToAnalyseErrorRecord.Exception.InnerException.InnerException.GetType().FullName)$($My.ESC)[0m" | Write-Output
                " $($My.ToAnalyseErrorRecord.Exception.InnerException.Message)" | Write-Output
            } else {
                " InnerException: $($My.ESC)[91mNULL$($My.ESC)[0m" | Write-Output
            }
        } else {
            " InnerException : $($My.ESC)[91mNULL$($My.ESC)[0m" | Write-Output
        }
    }

    end {
        Remove-Variable -Name 'My' -Force -ErrorAction Ignore
    }
}

$ErrorActionPreference = $BackupErrorActionPreference
Set-StrictMode -Off