Private/Show-W365CloudPCRemoteActionHistory.ps1

function Show-W365CloudPCRemoteActionHistory {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [object]$CloudPC
    )

    begin {
        Import-W365CliWindowsCloudPC
    }

    process {
        $results = @($CloudPC | Get-CloudPCRemoteActionResult)
        if ($results.Count -eq 0) {
            Write-Warning 'No remote action history was returned for this Cloud PC.'
            Write-Host 'Press any key to continue...' -ForegroundColor DarkGray
            [Console]::ReadKey($true) | Out-Null
            return
        }

        $columnHeader = '{0} {1} {2} {3} {4} {5}' -f
            (Format-W365CliText -Text 'Action' -Width 14),
            (Format-W365CliText -Text 'State' -Width 12),
            (Format-W365CliText -Text 'Started' -Width 22),
            (Format-W365CliText -Text 'Updated' -Width 22),
            (Format-W365CliText -Text 'Code' -Width 12),
            (Format-W365CliText -Text 'Message' -Width 40)

        Select-W365CliObject -InputObject $results -Title "Remote action history for $($CloudPC.Name)" -DisplayProperties @(
            'ActionName',
            'ActionState',
            'StartDateTime',
            'LastUpdatedDateTime',
            'StatusCode',
            'StatusMessage'
        ) -FilterProperties @(
            'ActionName',
            'ActionState',
            'StatusCode',
            'StatusMessage'
        ) -LabelScript {
            param($Result)

            '{0} {1} {2} {3} {4} {5}' -f
                (Format-W365CliText -Text $Result.ActionName -Width 14),
                (Format-W365CliText -Text $Result.ActionState -Width 12),
                (Format-W365CliText -Text $Result.StartDateTime -Width 22),
                (Format-W365CliText -Text $Result.LastUpdatedDateTime -Width 22),
                (Format-W365CliText -Text $Result.StatusCode -Width 12),
                (Format-W365CliText -Text $Result.StatusMessage -Width 40)
        } -DetailScript {
            param($Result)

            @(
                "Action: $($Result.ActionName)"
                "State: $($Result.ActionState)"
                "Started: $($Result.StartDateTime)"
                "Updated: $($Result.LastUpdatedDateTime)"
                "Status code: $($Result.StatusCode)"
                "Message: $($Result.StatusMessage)"
                "Has downtime: $($Result.HasDownTime)"
                "Managed ID: $($Result.ManagedDeviceId)"
                "Cloud PC ID: $($Result.CloudPcId)"
            )
        } -SummaryScript {
            param(
                [object[]]$AllItems,
                [object[]]$VisibleItems,
                [string]$Filter,
                [int]$SelectedIndex
            )

            $stateSummary = @(
                $AllItems |
                    Group-Object -Property ActionState |
                    Sort-Object Name |
                    ForEach-Object { '{0}: {1}' -f $(if ($_.Name) { $_.Name } else { 'Unknown' }), $_.Count }
            ) -join ' | '

            @(
                "Total: $($AllItems.Count) | Visible: $($VisibleItems.Count) | Selected: $([math]::Min($SelectedIndex + 1, [math]::Max($VisibleItems.Count, 1)))"
                "States: $stateSummary"
                $(if ($Filter) { "Search: $Filter" } else { 'Search: none' })
            )
        } -RefreshScript {
            @($CloudPC | Get-CloudPCRemoteActionResult)
        } -ColumnHeader $columnHeader -PageSize 12 -ViewOnly -Breadcrumb @('W365CLI','Cloud PCs','Remote action history') | Out-Null
    }

    end { }
}