Private/New-SubscriptionRunTimeStatusEventSource.ps1
function New-SubscriptionRunTimeStatusEventSource { [CmdletBinding()] [OutputType( [PSCustomObject] )] param ( [Parameter( Mandatory = $true )] [Array] $StringArray ) $startLine = ($StringArray | Select-String ":" -NotMatch | Select-Object -ExpandProperty LineNumber -First 1 -Skip 1) - 1 $endLine = ($StringArray | Select-String ":" -NotMatch | Select-Object -ExpandProperty LineNumber -First 1 -Skip 2) - 2 if ($endLine -lt 0) { $endLine = $StringArray.Count } $range = $endLine - $startLine $output = @() for ($i = $startLine; $i -lt $StringArray.Count; $i += $range + 1) { $hashTable = [HashTable]::new() ($StringArray[$i..($i + $range)]).ForEach({ $parts = $_ -split ":" if ($parts.Count -eq 1) { $hashTable.Add( "EventSource", $parts[0].Trim() ) } else { $hashTable.Add( $parts[0].Trim(), ($parts[1..$parts.count] -join ":").Trim() ) } }) $output += [PSCustomObject]$hashTable } Write-Output -InputObject $output } |