Public/Show-W365GalleryImage.ps1

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

    begin {
        Import-W365CliWindowsCloudPC
    }

    process {
        $items = @(Get-CloudPCGalleryImage | Sort-Object Status, DisplayName)
        if ($items.Count -eq 0) {
            Write-Warning 'No gallery images were returned.'
            return
        }

        $title = if ($Browse) { 'Windows 365 gallery images' } else { 'Pick a Windows 365 gallery image' }
        $columnHeader = '{0} {1} {2} {3} {4} {5}' -f
            (Format-W365CliText -Text 'Name' -Width 42),
            (Format-W365CliText -Text 'Status' -Width 14),
            (Format-W365CliText -Text 'Recommended SKU' -Width 24),
            (Format-W365CliText -Text 'Size' -Width 8),
            (Format-W365CliText -Text 'OS version' -Width 16),
            (Format-W365CliText -Text 'End date' -Width 18)

        Select-W365CliObject -InputObject $items -Title $title -DisplayProperties @(
            'DisplayName',
            'Status',
            'RecommendedSku',
            'SizeGB',
            'OsVersionNumber',
            'EndDate'
        ) -FilterProperties @(
            'DisplayName',
            'Status',
            'RecommendedSku',
            'OfferDisplayName',
            'SkuDisplayName',
            'PublisherName',
            'OsVersionNumber'
        ) -LabelScript {
            param($Image)

            '{0} {1} {2} {3} {4} {5}' -f
                (Format-W365CliText -Text $Image.DisplayName -Width 42),
                (Format-W365CliText -Text $Image.Status -Width 14),
                (Format-W365CliText -Text $Image.RecommendedSku -Width 24),
                (Format-W365CliText -Text "$($Image.SizeGB) GB" -Width 8),
                (Format-W365CliText -Text $Image.OsVersionNumber -Width 16),
                (Format-W365CliText -Text $Image.EndDate -Width 18)
        } -DetailScript {
            param($Image)

            @(
                "Name: $($Image.DisplayName)"
                "Status: $($Image.Status)"
                "Recommended SKU: $($Image.RecommendedSku)"
                "Size: $($Image.SizeGB) GB"
                "OS version: $($Image.OsVersionNumber)"
                "Offer: $($Image.OfferDisplayName)"
                "SKU: $($Image.SkuDisplayName)"
                "Publisher: $($Image.PublisherName)"
                "Start date: $($Image.StartDate)"
                "End date: $($Image.EndDate)"
                "Expiration date: $($Image.ExpirationDate)"
                "Image ID: $($Image.Id)"
            )
        } -SummaryScript {
            param(
                [object[]]$AllItems,
                [object[]]$VisibleItems,
                [string]$Filter,
                [int]$SelectedIndex
            )

            $statusSummary = @(
                $AllItems |
                    Group-Object -Property Status |
                    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)))"
                "Status: $statusSummary"
                $(if ($Filter) { "Search: $Filter" } else { 'Search: none' })
            )
        } -RefreshScript {
            @(Get-CloudPCGalleryImage | Sort-Object Status, DisplayName)
        } -ColumnHeader $columnHeader -PageSize 18 -ViewOnly:$Browse -Breadcrumb @('W365CLI','Catalog','Gallery images')
    }

    end { }
}