Private/steps-osd/Step-OSDCloudConfirmAutopilotJson.ps1

function Step-OSDCloudConfirmAutopilotJson {
    <#
    .SYNOPSIS
    Verifies and loads Autopilot JSON configuration for OSDCloud deployments.
 
    .DESCRIPTION
    Evaluates available Autopilot configuration inputs in priority order: existing object,
    URL source, and discovered local JSON files. If no profile is selected or discovered,
    deployment continues without AutopilotConfigurationFile.json.
 
    .EXAMPLE
    Step-OSDCloudConfirmAutopilotJson
    Resolves Autopilot JSON from configured sources and logs the effective outcome.
 
    .LINK
    https://github.com/OSDeploy/OSD/tree/master/docs
 
    .NOTES
    Author: David Segura - Recast Software
    2026-07-15 - Initial help block created
    #>

    [CmdletBinding()]
    param ()
    #=================================================
    Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] [$($MyInvocation.MyCommand.Name)]"
    #=================================================
    if ($env:SystemDrive -ne 'X:') {
        # Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] Skip. Not running in WinPE (X:)"
        return
    }
    #=================================================
    if ($Global:OSDCloud.SkipAutopilot -ne $true) {
        Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] Validate Autopilot Configuration"

        if ($Global:OSDCloud.AutopilotJsonObject) {
            Write-DarkGrayHost 'Importing AutopilotJsonObject'
        }
        elseif ($Global:OSDCloud.AutopilotJsonUrl) {
            Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] Importing Autopilot Configuration $($Global:OSDCloud.AutopilotJsonUrl)"
            if (Test-WebConnection -Uri $Global:OSDCloud.AutopilotJsonUrl) {
                $Global:OSDCloud.AutopilotJsonObject = (Invoke-WebRequest -Uri $Global:OSDCloud.AutopilotJsonUrl).Content | ConvertFrom-Json
            }
        }
        else {
            $autopilotSearchName = '*.json'
            if ($Global:OSDCloud.AutopilotJsonItem) {
                $autopilotSearchName = $Global:OSDCloud.AutopilotJsonItem.Name
            }
            elseif ($Global:OSDCloud.AutopilotJsonName) {
                $autopilotSearchName = $Global:OSDCloud.AutopilotJsonName
            }

            $Global:OSDCloud.AutopilotJsonChildItem = @(
                Find-OSDCloudFile -Name $autopilotSearchName -Path '\OSDCloud\Autopilot\Profiles\'
                Find-OSDCloudFile -Name $autopilotSearchName -Path '\OSDCloud\Config\AutopilotJSON\'
            ) | Sort-Object FullName | Where-Object {$_.FullName -notlike 'C*'}

            if ($Global:OSDCloud.AutopilotJsonChildItem) {
                if ($Global:OSDCloud.AutopilotJsonItem -or $Global:OSDCloud.AutopilotJsonName) {
                    $Global:OSDCloud.AutopilotJsonItem = $Global:OSDCloud.AutopilotJsonChildItem | Select-Object -First 1
                }
                elseif ($Global:OSDCloud.ZTI -eq $true) {
                    $Global:OSDCloud.AutopilotJsonItem = $Global:OSDCloud.AutopilotJsonChildItem | Select-Object -First 1
                }
                else {
                    $Global:OSDCloud.AutopilotJsonItem = Select-OSDCloudAutopilotJsonItem
                }

                if ($Global:OSDCloud.AutopilotJsonItem) {
                    $Global:OSDCloud.AutopilotJsonObject = Get-Content $Global:OSDCloud.AutopilotJsonItem.FullName | ConvertFrom-Json
                }
            }
        }

        if ($Global:OSDCloud.AutopilotJsonObject) {
            Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] OSDCloud will apply the following Autopilot Configuration as AutopilotConfigurationFile.json"
            $Global:OSDCloud.AutopilotJsonObject | Format-List | Out-Host
        }
        else {
            Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] AutopilotConfigurationFile.json will not be configured for this deployment"
        }
    }
    #=================================================
}