Functions/Productivity/Show-Error.ps1
<#
.SYNOPSIS Format the last errors and show them on the console. .DESCRIPTION The command will get the specified number of errors of the global Error variable and shows them in a optimized way to analyze the occurred issues. This includes a better error description, the script stack trace and all exceptions and inner exceptions. .EXAMPLE PS C:\> Show-Error Show the last 3 errors on the console host. .LINK https://github.com/claudiospizzi/ProfileFever #> function Show-Error { [CmdletBinding(DefaultParameterSetName = 'Last')] [Alias('err')] param ( # Number of errors to show. [Parameter(Mandatory = $false, ParameterSetName = 'Last', Position = 0)] [System.Int32] $Last = 3, # Show all errors. [Parameter(Mandatory = $true, ParameterSetName = 'All')] [Switch] $All ) try { $errorRecords = $Global:Error if (-not $All.IsPresent) { $errorRecords = @($errorRecords | Select-Object -First $Last) } Write-Host '' for ($i = 0; $i -lt $errorRecords.Count; $i++) { $errorRecord = $errorRecords[$i] if ($null -ne $errorRecord) { Write-Host "Error #$i" -ForegroundColor 'Red' Write-Host $errorRecord.ToString() Write-Host " $($errorRecord.CategoryInfo)" # Optional error details, only show if the exist if ($null -ne $errorRecord.TargetObject) { Write-Host " TargetObject: $($errorRecord.TargetObject)" } if ($null -ne $errorRecord.ErrorDetails) { Write-Host " ErrorDetails: $($errorRecord.ErrorDetails)" } # Show the stack trace where the exception happened foreach ($errorRecordStackTraceLine in ($errorRecord.ScriptStackTrace -split "`n")) { if (-not [System.String]::IsNullOrWhiteSpace($errorRecordStackTraceLine)) { Write-Host " $($errorRecordStackTraceLine.Trim())" } } $errorException = $errorRecord.Exception while ($null -ne $errorException) { Write-Host $errorException.Message Write-Host " $($errorException.GetType().FullName)" foreach ($errorExceptionStackTraceLine in ($errorException.StackTrace -split "`n")) { if (-not [System.String]::IsNullOrWhiteSpace($errorExceptionStackTraceLine)) { Write-Host " $($errorExceptionStackTraceLine.Trim())" } } $errorException = $errorException.InnerException } } Write-Host '' } } catch { $PSCmdlet.ThrowTerminatingError($_) } } |