Public/Show-W365CloudPC.ps1

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

    begin {
        Import-W365CliWindowsCloudPC
    }

    process {
        $cloudPcs = @(Get-CloudPC | Sort-Object Name)
        if ($cloudPcs.Count -eq 0) {
            Write-Warning 'No Cloud PCs were returned.'
            return
        }

        $browserTitle = if ($Browse) { 'Windows 365 Cloud PCs' } else { 'Pick a Windows 365 Cloud PC' }
        $columnHeader = '{0} {1} {2} {3} {4}' -f
            (Format-W365CliText -Text 'Name' -Width 34),
            (Format-W365CliText -Text 'Assigned user' -Width 34),
            (Format-W365CliText -Text 'Type' -Width 10),
            (Format-W365CliText -Text 'Status' -Width 14),
            (Format-W365CliText -Text 'Service plan' -Width 40)

        Select-W365CliObject -InputObject $cloudPcs -Title $browserTitle -DisplayProperties @(
            'Name',
            'AssignedUserUpn',
            'ProvisioningType',
            'ProvisioningStatus',
            'ServicePlanName'
        ) -FilterProperties @(
            'Name',
            'ManagedDeviceName',
            'AssignedUserUpn',
            'ProvisioningType',
            'ProvisioningStatus',
            'ServicePlanName'
        ) -LabelScript {
            param($CloudPC)

            '{0} {1} {2} {3} {4}' -f
                (Format-W365CliText -Text $CloudPC.Name -Width 34),
                (Format-W365CliText -Text $CloudPC.AssignedUserUpn -Width 34),
                (Format-W365CliText -Text $CloudPC.ProvisioningType -Width 10),
                (Format-W365CliText -Text $CloudPC.ProvisioningStatus -Width 14),
                (Format-W365CliText -Text $CloudPC.ServicePlanName -Width 40)
        } -DetailProperties @(
            'Name',
            'ManagedDeviceName',
            'AssignedUserUpn',
            'UserPrincipalName',
            'ProvisioningType',
            'ProvisioningStatus',
            'ServicePlanName',
            'ManagedDeviceId',
            'AadDeviceId',
            'Id'
        ) -DetailScript {
            param($CloudPC)

            @(
                "Name: $($CloudPC.Name)"
                "Managed device name: $($CloudPC.ManagedDeviceName)"
                "Assigned user: $($CloudPC.AssignedUserUpn)"
                "Provisioning type: $($CloudPC.ProvisioningType)"
                "Provisioning status: $($CloudPC.ProvisioningStatus)"
                "Service plan: $($CloudPC.ServicePlanName)"
                "Cloud PC ID: $($CloudPC.Id)"
                "Managed device ID: $($CloudPC.ManagedDeviceId)"
                "Entra device ID: $($CloudPC.AadDeviceId)"
            )
        } -ActionScript {
            param($CloudPC, $Action)

            Invoke-W365CloudPCAction -CloudPC $CloudPC -Action $Action
        } -ActionLabelsScript {
            param($CloudPC)

            Get-W365CloudPCActionItem -CloudPC $CloudPC
        } -SummaryScript {
            param(
                [object[]]$AllItems,
                [object[]]$VisibleItems,
                [string]$Filter,
                [int]$SelectedIndex
            )

            Get-W365CloudPCSummary -AllItems $AllItems -VisibleItems $VisibleItems -Filter $Filter -SelectedIndex $SelectedIndex
        } -RefreshScript {
            @(Get-CloudPC | Sort-Object Name)
        } -ColumnHeader $columnHeader -PageSize 18 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Cloud PCs','Browse and manage')
    }

    end { }
}