Dargslan.WinAutopilot.psm1

<#
.SYNOPSIS
    Windows Autopilot diagnostics toolkit — hardware hash collection, deployment profile status, OOBE configuration, and provisioning log analysis (2026 Edition)

.DESCRIPTION
    2026 Edition — Part of the Dargslan Windows Admin Toolkit collection.
    More tools and resources at https://dargslan.com
    Free Cheat Sheets: https://dargslan.com/cheat-sheets

.LINK
    https://dargslan.com

.LINK
    https://github.com/Dargslan/powershell-admin-scripts
#>


function Get-AutopilotInfo {
    <#
    .SYNOPSIS
        Collect Autopilot hardware hash and deployment info
    .DESCRIPTION
        Reports hardware hash, serial number, Autopilot profile status, and deployment readiness.
        Part of Dargslan.WinAutopilot (2026 Edition) — https://dargslan.com
    #>

    [CmdletBinding()] param([switch]$Json, [string]$ExportCSV)

    $serial = (Get-CimInstance Win32_BIOS).SerialNumber
    $cs = Get-CimInstance Win32_ComputerSystem
    $report = [ordered]@{
        Device = [PSCustomObject]@{
            SerialNumber = $serial
            Manufacturer = $cs.Manufacturer
            Model = $cs.Model
            Hostname = $env:COMPUTERNAME
        }
        HardwareHash = try { (Get-CimInstance -Namespace root/cimv2/mdm/dmmap -ClassName MDM_DevDetail_Ext01 -Filter "InstanceID=`"Ext`" AND ParentID=`"./DevDetail`"" -ErrorAction Stop).DeviceHardwareData } catch { "Requires admin and MDM enrollment" }
        DeploymentProfile = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Provisioning\AutopilotPolicy" -ErrorAction SilentlyContinue | Select-Object CloudAssignedTenantId, CloudAssignedLanguage, CloudAssignedRegion
        OOBESettings = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Provisioning\OMADM\Accounts\*" -ErrorAction SilentlyContinue | Select-Object -First 1
        ProvisioningLogs = Get-WinEvent -LogName "Microsoft-Windows-Provisioning-Diagnostics-Provider/Admin" -MaxEvents 10 -ErrorAction SilentlyContinue | Select-Object TimeCreated, LevelDisplayName, Message
    }
    if ($ExportCSV) {
        [PSCustomObject]@{
            "Device Serial Number" = $serial
            "Windows Product ID" = (Get-CimInstance Win32_OperatingSystem).SerialNumber
            "Hardware Hash" = $report.HardwareHash
        } | Export-Csv $ExportCSV -NoTypeInformation
        Write-Host " Exported to: $ExportCSV" -ForegroundColor Green
    }
    if ($Json) { return $report | ConvertTo-Json -Depth 3 }
    Write-Host "`n [Autopilot Info — 2026 Edition]" -ForegroundColor Cyan
    $report.Device | Format-List
    if ($report.DeploymentProfile) { Write-Host " Deployment Profile:" -ForegroundColor Yellow; $report.DeploymentProfile | Format-List }
    return $report
}

Export-ModuleMember -Function *