private/output/New-ErrorDisplayRecord.ps1
|
function New-ErrorDisplayRecord { <# .SYNOPSIS Creates a PSCustomObject for displaying errors in the Errors DataGrid. #> param( [Parameter(Mandatory)] $ErrorRecord ) # Detect if this is a raw System.Management.Automation.ErrorRecord vs PSErrorRecord wrapper $isRawErrorRecord = $ErrorRecord -is [System.Management.Automation.ErrorRecord] if ($isRawErrorRecord) { # Extract values from native ErrorRecord structure $message = if ($ErrorRecord.Exception) { $ErrorRecord.Exception.Message } else { $ErrorRecord.ToString() } $lineNumber = if ($ErrorRecord.InvocationInfo) { $ErrorRecord.InvocationInfo.ScriptLineNumber } else { 0 } $category = if ($ErrorRecord.CategoryInfo) { $ErrorRecord.CategoryInfo.Category.ToString() } else { 'Error' } $scriptName = if ($ErrorRecord.InvocationInfo) { $ErrorRecord.InvocationInfo.ScriptName } else { $null } $line = if ($ErrorRecord.InvocationInfo) { $ErrorRecord.InvocationInfo.Line } else { $null } $stackTrace = $ErrorRecord.ScriptStackTrace $errorId = $ErrorRecord.FullyQualifiedErrorId $innerEx = if ($ErrorRecord.Exception -and $ErrorRecord.Exception.InnerException) { $ErrorRecord.Exception.InnerException } else { $null } } else { # PSErrorRecord wrapper - use direct properties $message = if ($ErrorRecord.Message) { $ErrorRecord.Message } else { $ErrorRecord.ToString() } $lineNumber = if ($ErrorRecord.LineNumber -gt 0) { $ErrorRecord.LineNumber } else { 0 } $category = if ($ErrorRecord.Category) { $ErrorRecord.Category } else { 'Error' } $scriptName = $ErrorRecord.ScriptName $line = $ErrorRecord.Line $stackTrace = $ErrorRecord.ScriptStackTrace $errorId = $ErrorRecord.FullyQualifiedErrorId $innerEx = $ErrorRecord.InnerException } # Build searchable details combining all error info $detailParts = @( $message $category $scriptName $line $stackTrace $errorId if ($innerEx) { $innerEx.ToString() } ) | Where-Object { $_ } $errorDetails = $detailParts -join ' ' return [PSCustomObject]@{ Time = if ($ErrorRecord.Timestamp) { $ErrorRecord.Timestamp.ToString('HH:mm:ss') } else { (Get-Date).ToString('HH:mm:ss') } LineNumber = if ($lineNumber -gt 0) { $lineNumber } else { '' } Category = $category Message = $message ScriptName = $scriptName Line = $line ScriptStackTrace = $stackTrace FullyQualifiedErrorId = $errorId InnerException = $innerEx RawRecord = $ErrorRecord _ErrorDetails = $errorDetails } } |