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 |