private/BootMedia/WindowsOS/Find-MountedWindowsMedia.ps1

#Requires -Version 7.4

function Find-MountedWindowsMedia {
    <#
    .SYNOPSIS
        Scans mounted drives for Windows installation media containing install.wim or install.esd.
 
    .DESCRIPTION
        Enumerates PSDrives D: through Z: and checks each for a Sources directory containing
        install.wim or install.esd. Also checks x64\Sources and x86\Sources subdirectories
        for multi-architecture media. Returns file objects with the MediaRoot property added.
 
    .OUTPUTS
        [PSCustomObject] File objects with a MediaRoot calculated property.
 
    .NOTES
        Author: David Segura
        Version: 0.1.0
    #>

    [CmdletBinding()]
    param ()

    $IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
    if (-not $IsAdmin) {
        Write-Warning "[$($MyInvocation.MyCommand.Name)] Must be run with Administrator privileges"
        return
    }

    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Scanning PSDrives for Windows installation media"

    $WindowsMediaDrives = Get-PSDrive -PSProvider 'FileSystem' |
        Where-Object { ($_.Name).Length -eq 1 } |
        Where-Object { $_.Name -match '^[D-Z]' } |
        Where-Object { $_.Root -match '^[D-Z]:\\' }

    Write-Verbose "[$($MyInvocation.MyCommand.Name)] Found $($WindowsMediaDrives.Count) candidate PSDrives"

    $WindowsMediaSources = [System.Collections.Generic.List[PSObject]]::new()

    foreach ($Drive in $WindowsMediaDrives) {
        $searchPaths = @(
            "$($Drive.Root)Sources"
            "$($Drive.Root)x64\Sources"
            "$($Drive.Root)x86\Sources"
        )

        foreach ($searchPath in $searchPaths) {
            if (Test-Path $searchPath) {
                Write-Verbose "[$($MyInvocation.MyCommand.Name)] Checking $searchPath"
                $found = Get-ChildItem "$searchPath\*" -Include install.wim, install.esd -ErrorAction SilentlyContinue |
                    Select-Object -Property @{Name = 'MediaRoot'; Expression = { (Get-Item $_.Directory).Parent.FullName } }, *
                if ($found) {
                    foreach ($item in $found) {
                        $WindowsMediaSources.Add($item)
                    }
                }
            }
        }
    }

    if ($WindowsMediaSources.Count -gt 0) {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Found $($WindowsMediaSources.Count) Windows media source(s)"
        return $WindowsMediaSources
    }
    else {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] No Windows installation media found"
        return $null
    }
}