Public/Show-W365LaunchDetail.ps1

function Show-W365LaunchDetail {
    [CmdletBinding()]
    [OutputType('WindowsCloudPC.CloudPCLaunchDetail')]
    param([switch]$Browse)

    begin { Import-W365CliWindowsCloudPC }

    process {
        $items = @(Invoke-W365CliSpinner -Message 'Loading Cloud PC launch details.' -ScriptBlock { Get-CloudPC | Get-CloudPCLaunchDetail | Sort-Object CloudPcName })
        if ($items.Count -eq 0) { Write-Warning 'No launch details were returned.'; return }
        $columnHeader = '{0} {1} {2} {3}' -f (Format-W365CliText -Text 'Cloud PC' -Width 34),(Format-W365CliText -Text 'Status' -Width 14),(Format-W365CliText -Text 'Switch' -Width 8),(Format-W365CliText -Text 'User' -Width 34)
        Select-W365CliObject -InputObject $items -Title 'Windows 365 launch details' -DisplayProperties @('CloudPcName','LaunchDetailStatus','Windows365SwitchCompatible','UserId') -FilterProperties @('CloudPcName','LaunchDetailStatus','UserId') -LabelScript {
            param($Launch)
            '{0} {1} {2} {3}' -f (Format-W365CliText -Text $Launch.CloudPcName -Width 34),(Format-W365CliText -Text $Launch.LaunchDetailStatus -Width 14),(Format-W365CliText -Text $Launch.Windows365SwitchCompatible -Width 8),(Format-W365CliText -Text $Launch.UserId -Width 34)
        } -DetailScript {
            param($Launch)
            @("Cloud PC: $($Launch.CloudPcName)","Status: $($Launch.LaunchDetailStatus)","User: $($Launch.UserId)","Switch compatible: $($Launch.Windows365SwitchCompatible)","Failure reason: $($Launch.Windows365SwitchCompatibilityFailureReasonType)","Launch URL: $($Launch.CloudPcLaunchUrl)","Windows App URI: $($Launch.WindowsAppLaunchUri)","Error: $($Launch.ErrorMessage)")
        } -RefreshScript {
            @(Invoke-W365CliSpinner -Message 'Refreshing Cloud PC launch details.' -ScriptBlock { Get-CloudPC | Get-CloudPCLaunchDetail | Sort-Object CloudPcName })
        } -ColumnHeader $columnHeader -PageSize 18 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Reports','Launch details')
    }
}