Public/Get-NSPConditionalAccessRunSummary.ps1

function Get-NSPConditionalAccessRunSummary {
    <#
    .SYNOPSIS
        One row per run item: result, the stage it is at, and the latest stage message.
    .EXAMPLE
        Get-NSPConditionalAccessRunSummary -Run $run.Path | Format-Table -Wrap
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]$Run
    )

    if ($Run -is [string]) { $Run = Get-Content -LiteralPath $Run -Raw | ConvertFrom-Json }
    foreach ($item in $Run.Items) {
        $current = @($item.Stages | Where-Object Status -ne 'Succeeded')[0]
        $last = @($item.Stages | Where-Object { $_.Message })[-1]
        [pscustomobject]@{
            RunStatus = $Run.Status
            ItemId = $item.ItemId
            Action = $item.Action
            Result = $item.Result
            Stage = if ($current) { "$($current.Name) ($($current.Status))" } else { 'done' }
            ObjectId = $item.ObjectId
            Message = if ($last) { $last.Message } else { $null }
            Notes = (@($item.Notes) -join ' ')
        }
    }
}