Public/Get-CloudPCCustomImage.ps1

function Get-CloudPCCustomImage {
    <#
    .SYNOPSIS
        Returns Windows 365 Cloud PC custom device images.

    .DESCRIPTION
        Calls the Microsoft Graph beta
        https://graph.microsoft.com/beta/deviceManagement/virtualEndpoint/deviceImages
        endpoint and returns custom OS images uploaded for Cloud PC provisioning.

    .PARAMETER Id
        Optional exact custom image ID filter.

    .PARAMETER DisplayName
        Optional exact display name filter. Alias: Name.

    .PARAMETER Status
        Optional image status filter.

    .EXAMPLE
        Get-CloudPCCustomImage | Format-Table DisplayName,Status,OperatingSystem,OsBuildNumber

    .EXAMPLE
        Get-CloudPCCustomImage -DisplayName 'Win11-Corp-Image'

    .EXAMPLE
        Get-CloudPCCustomImage -Status ready
    #>

    [CmdletBinding()]
    [OutputType('WindowsCloudPC.CustomImage')]
    param(
        [string]$Id,

        [Alias('Name')]
        [string]$DisplayName,

        [string]$Status
    )

    begin {
        Connect-CloudPC | Out-Null
    }

    process {
        $select = @(
            'id',
            'displayName',
            'operatingSystem',
            'osBuildNumber',
            'version',
            'status',
            'expirationDate',
            'osStatus',
            'sourceImageResourceId',
            'lastModifiedDateTime',
            'statusDetails',
            'errorCode',
            'osVersionNumber',
            'sizeInGB'
        ) -join ','

        $uri = 'https://graph.microsoft.com/beta/deviceManagement/virtualEndpoint/deviceImages' +
               '?$select=' + [uri]::EscapeDataString($select)

        Invoke-GraphPaged -Uri $uri | ForEach-Object {
            $image = $_

            if ($Id -and $image.id -ne $Id) { return }
            if ($DisplayName -and $image.displayName -ne $DisplayName) { return }
            if ($Status -and $image.status -ne $Status) { return }

            [pscustomobject]@{
                PSTypeName            = 'WindowsCloudPC.CustomImage'
                Id                    = $image.id
                DisplayName           = $image.displayName
                OperatingSystem       = $image.operatingSystem
                OsBuildNumber         = $image.osBuildNumber
                OsVersionNumber       = $image.osVersionNumber
                Version               = $image.version
                Status                = $image.status
                StatusDetails         = $image.statusDetails
                ErrorCode             = $image.errorCode
                OsStatus              = $image.osStatus
                ExpirationDate        = if ($image.expirationDate) { [datetime]$image.expirationDate } else { $null }
                LastModifiedDateTime  = if ($image.lastModifiedDateTime) { ([datetime]$image.lastModifiedDateTime).ToLocalTime() } else { $null }
                SizeGB                = $image.sizeInGB
                SourceImageResourceId = $image.sourceImageResourceId
                Raw                   = $image
            }
        }
    }
}