private/core-operatingsystem/Get-OSDCoreOperatingSystemCacheObject.ps1

function Get-OSDCoreOperatingSystemCacheObject {
    <#
    .SYNOPSIS
    Gets the cached operating system content object for the selected OSDCore operating system.
 
    .DESCRIPTION
    Searches OSDCore cache content for the first ESD or WIM entry that matches the
    selected operating system object's FileName. Returns the matching cache content object when
    found, or $null when the operating system object, cache content, or matching cache item is missing.
 
    .PARAMETER OperatingSystemCloudObject
    Operating system object containing the FileName property to match. Defaults to $global:OSDCoreOperatingSystemCloudObject.
 
    .PARAMETER CacheContent
    Cache content inventory to search. Defaults to $global:OSDCoreCache.
 
    .EXAMPLE
    Get-OSDCoreOperatingSystemCacheObject
    Returns the USB cache content object for $global:OSDCoreOperatingSystemCloudObject when it exists.
 
    .EXAMPLE
    if (Get-OSDCoreOperatingSystemCacheObject) { 'Operating system cache content exists.' }
    Tests whether the selected operating system payload exists in the USB cache inventory.
 
    .LINK
    https://github.com/OSDeploy/OSD/tree/master/docs
 
    .NOTES
    Author: David Segura - Recast Software
    2026-07-19 - Initial private helper created
    #>

    [CmdletBinding()]
    [OutputType([System.Management.Automation.PSObject])]
    param
    (
        [Parameter(ValueFromPipeline)]
        [psobject]
        $OperatingSystemCloudObject = $global:OSDCoreOperatingSystemCloudObject,

        [Parameter()]
        [psobject[]]
        $CacheContent = $global:OSDCoreCache
    )

    process {
        if ($null -eq $OperatingSystemCloudObject) {
            Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] OSDCoreOperatingSystemCloudObject is not set."
            return $null
        }

        $OperatingSystemFileName = [string]$OperatingSystemCloudObject.FileName
        if ([string]::IsNullOrWhiteSpace($OperatingSystemFileName)) {
            Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] OSDCoreOperatingSystemCloudObject FileName is not set."
            return $null
        }

        if (-not $CacheContent) {
            Write-Verbose "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)] OSDCoreCache is not set."
            return $null
        }

        $CacheContent | Where-Object { $_.Type -in @('ESD', 'WIM') -and $_.Name -eq $OperatingSystemFileName } | Select-Object -First 1
    }
}