Functions/Private/Convert-StackTraceToAiStackFrames.ps1
function Convert-StackTraceToAiStackFrames { <# .SYNOPSIS Converts a strack trace string into an Application Insights formatted stack frame collection. .DESCRIPTION Converts a strack trace string into an Application Insights formatted stack frame collection. .PARAMETER Assembly Provide the name and version of the assembly. .PARAMETER StackTrace Specify the stack trace as a string. .EXAMPLE C:\> Convert-StackTraceToAiStackFrames -Assembly $Error[0].Exception.TargetSite.Module.Assembly.ToString() -StackTrace $Error[0].Exception.StackTrace Converts the stack trace into a stack frame collection. #> [CmdletBinding()] Param ( [Parameter( Mandatory=$true, HelpMessage="Provide the name and version of the assembly.")] [System.String] $Assembly, [Parameter(Mandatory=$false)] [System.String] $StackTrace ) Process { $frames = New-Object -TypeName 'System.Collections.Generic.List[PSCustomObject]'; if (![System.String]::IsNullOrWhiteSpace($StackTrace)) { $splitStack = $StackTrace.Split([System.Environment]::NewLine); $currentLevel = 0; foreach ($line in $splitStack) { if (![System.String]::IsNullOrWhiteSpace($line)) { $trimmedLine = $line.Trim(); if ($trimmedLine.StartsWith("at ")) { $frame = [PSCustomObject]@{ 'level' = $currentLevel 'method' = $trimmedLine.Substring(3) 'assembly' = $Assembly 'line' = 0 }; $frames.Add($frame); $currentLevel++; } } } } Write-Output -InputObject $frames; } } |