HomeNewsletterCommunityToolsArchiveBlogAboutQuick Links Subscribe free
← Back to Blog
Autopilot AutopilotWindowsIntuneOOBEESPEntra IDZero TouchDevice ProvisioningPowerShell

Windows Autopilot: Complete Device Lifecycle Management Guide

IA
Imran Awan
28 June 2026

Windows Autopilot is the closest thing IT has to magic. A device ships directly from the manufacturer to an employee's desk. The employee powers it on, signs in with their corporate credentials, and within 20 minutes they have a fully configured, compliant, policy-enforced machine — without a single IT engineer touching the hardware. No custom image. No USB key. No imaging infrastructure. That is the Autopilot promise. This guide explains how it actually works, what each deployment mode does, and how to operate it reliably at scale.

Community credit: The deployment lifecycle pyramid and structured overview in this guide were inspired by handwritten Autopilot notes by Anuradha Kumari — a great example of the Microsoft IT community distilling complex concepts into clear frameworks.

What Is Windows Autopilot?

Windows Autopilot is a collection of cloud-based technologies that configure new Windows devices during their Out-of-Box Experience (OOBE) — the setup screens a user sees when they first power on a new machine. Instead of running through a manual setup or booting from a custom image, the device connects to the internet, contacts the Windows Autopilot cloud service, downloads its assigned profile, joins Entra ID (formerly Azure AD), enrolls in Intune, and receives all policies, apps, and configurations — automatically, in the background, while the user simply watches a progress screen.

The core equation: Windows Autopilot = Automated OOBE. The device's hardware hash is registered in advance. When the device connects to the internet at first boot, Windows recognises it and kicks off the automated provisioning flow assigned to it — no admin present, no imaging infrastructure required.

The 4 Deployment Modes

Autopilot is not a single workflow — it has four distinct deployment modes, each suited to a different scenario:

Mode Who configures it Best for Requires admin presence
User-DrivenEnd user at first bootDirect-shipped new devices to remote employeesNo
Self-DeployingNo user interaction at allKiosks, shared devices, meeting room PCsNo
Pre-provisioning (White Glove)IT or partner pre-stages the device, user completes itLarge deployments where IT wants to pre-install heavy appsYes (for pre-stage)
Existing DevicesConfigMgr or re-imaging triggersUpgrading existing machines to Autopilot managementVaries

The 5 Autopilot Steps — In Detail

Step 1 — Device Registration

Before Autopilot can work, the device's hardware identity must be registered in your tenant. The hardware identity is called a hardware hash — a unique fingerprint generated from the device's hardware components. Registration can happen three ways: via your hardware vendor (Dell, HP, Lenovo, Microsoft Surface all support direct OEM upload), via a CSV import in the Intune portal, or via PowerShell on the device itself.

01-HarvestHardwareHash.ps1
# Run on the target device to harvest its hardware hash
# Requires running as Administrator

# Install the Get-WindowsAutoPilotInfo module if not present
if (-not (Get-Module -ListAvailable -Name "Get-WindowsAutoPilotInfo")) {
    Install-Script -Name "Get-WindowsAutoPilotInfo" -Force
}

# Export hardware hash to CSV for manual import
Get-WindowsAutoPilotInfo -OutputFile "C:\Temp\AutopilotHash.csv"

# OR: Upload directly to Intune (requires MgGraph auth)
Get-WindowsAutoPilotInfo -Online

Step 2 — Profile Assignment

An Autopilot Deployment Profile defines what happens during OOBE — which steps to skip (EULA, privacy settings, Cortana), whether the device joins Entra ID as user-driven or self-deploying, whether the user can access the desktop during Enrollment Status Page (ESP), and which ESP configuration applies. Profiles are assigned to device groups in Intune based on Autopilot group tags.

Group Tag tip: Set a Group Tag when registering devices (e.g., "Corp-Laptop-London"). Create a dynamic Entra ID group with rule device.enrollmentProfileName -eq "Corp-Laptop-London" and assign the correct Autopilot profile to that group. This makes large multi-profile deployments completely automated.

Step 3 — Shipping to User

Once registered and a profile is assigned, the device can ship directly from your hardware vendor to the employee. The IT department never needs to physically touch it. The vendor ships based on your purchase order; Autopilot handles the rest at first boot. This is the step that eliminates the traditional "staging area" and associated logistics overhead.

Step 4 — OOBE & Autopilot Enrollment

The user powers on the device, connects to Wi-Fi or ethernet, and enters their corporate credentials. Windows contacts the Autopilot cloud service, recognises the hardware hash, downloads the assigned profile, and begins the automated setup. The Enrollment Status Page (ESP) appears — a progress screen that shows device and user policy application in real time. Critical apps and policies must complete before the user can reach the desktop.

Step 5 — Full MDM Configuration

With enrollment complete, Intune takes over. Device compliance policies, security baselines, configuration profiles, Win32 apps, and certificates all deploy in the background. The Enrollment Status Page tracks progress. When all required items are installed, the desktop unlocks and the user is productive — on a fully managed, policy-compliant machine, from a factory-sealed box.

The Deployment Architecture Pyramid

Understanding the layered build-up during Autopilot helps IT admins sequence dependencies correctly:

Layer What happens Admin control point
1. Physical HardwareHardware hash registered in Autopilot; device identity establishedOEM portal or PowerShell upload
2. Azure AD / Entra JoinDevice registers its identity in Entra ID; Conditional Access scope beginsEntra ID join type in Autopilot profile
3. MDM EnrollmentDevice enrolls in Intune; management agent activates; IME installsMDM authority, enrollment restrictions
4. Autopilot ConfigProfiles, policies, compliance rules, security baselines applied; Required apps installESP configuration, device and user policy targeting
5. Device ReadinessAll required policies and apps confirmed installed; desktop unlockedESP blocking apps list, compliance policies

Enrollment Status Page — The Gatekeeper

The Enrollment Status Page (ESP) is what controls whether a user can access the desktop before the device is fully configured. Without ESP configured, the user reaches the desktop immediately after Entra join — before any apps or policies have applied. This is dangerous for corporate devices. A user on an unconfigured device can access corporate data without DLP policies, without compliance status, and without required security software.

ESP setting What it controls Recommended
Show app and profile configuration progressWhether the user sees the ESP screen at allYes
Block device use until all required apps are installedPrevents desktop access until Required apps completeYes (for corporate devices)
Allow users to reset device if installation error occursUser can self-recover from a failed ESPYes
Allow users to use device if installation error occursFalls through to desktop on failureSituational
ESP timeout (minutes)How long before ESP gives up waiting60 min minimum; 120 for complex deployments

Autopilot Goals — What You're Actually Achieving

Goal Traditional approach Autopilot approach
Device provisioning time1–4 hours (imaging, staging)20–60 minutes (unattended)
IT engineer involvementRequired on-siteZero touch for user-driven mode
Imaging infrastructureWDS, MDT, SCCM requiredNot required
Remote/hybrid workersDevice shipped to IT, configured, re-shippedDevice ships direct from OEM to employee
Security compliance at first loginPolicies apply gradually after imagingDevice is compliant before desktop unlocks

Checking Autopilot Registration Status via PowerShell

02-CheckAutopilotRegistration.ps1
# Check Autopilot registration status for all devices in your tenant
# Requires Microsoft Graph PowerShell SDK
Connect-MgGraph -Scopes "DeviceManagementServiceConfig.Read.All"

$autopilotDevices = Get-MgDeviceManagementWindowsAutopilotDeviceIdentity -All

$autopilotDevices | Select-Object `
    SerialNumber,
    Model,
    GroupTag,
    @{n="EnrollmentState";e={$_.EnrollmentState}},
    @{n="LastContactedDateTime";e={$_.LastContactedDateTime}} |
    Sort-Object LastContactedDateTime -Descending |
    Format-Table -AutoSize

Write-Host "Total registered: $($autopilotDevices.Count)"
03-GetAutopilotProfileAssignment.ps1
# List all Autopilot deployment profiles and their group assignments
Connect-MgGraph -Scopes "DeviceManagementServiceConfig.Read.All","Group.Read.All"

$profiles = Get-MgDeviceManagementWindowsAutopilotDeploymentProfile -All

foreach ($profile in $profiles) {
    Write-Host "`n Profile: $($profile.DisplayName)" -ForegroundColor Cyan
    Write-Host "  Mode: $($profile.DeviceType)"
    $assignments = Get-MgDeviceManagementWindowsAutopilotDeploymentProfileAssignment -WindowsAutopilotDeploymentProfileId $profile.Id
    foreach ($a in $assignments) {
        $group = Get-MgGroup -GroupId $a.Target.GroupId -ErrorAction SilentlyContinue
        Write-Host "  Assigned to: $($group.DisplayName ?? $a.Target.GroupId)"
    }
}
04-BulkUploadAutopilotDevices.ps1
# Bulk upload hardware hashes from CSV to Intune Autopilot
# CSV must have columns: Device Serial Number, Windows Product ID, Hardware Hash, Group Tag (optional)
Connect-MgGraph -Scopes "DeviceManagementServiceConfig.ReadWrite.All"

$csvPath = "C:\Temp\AutopilotDevices.csv"
$devices = Import-Csv $csvPath

foreach ($device in $devices) {
    $body = @{
        "@odata.type" = "#microsoft.graph.importedWindowsAutopilotDeviceIdentity"
        serialNumber  = $device."Device Serial Number"
        productKey    = $device."Windows Product ID"
        hardwareIdentifier = $device."Hardware Hash"
        groupTag      = $device."Group Tag"
    }
    New-MgDeviceManagementImportedWindowsAutopilotDeviceIdentity -BodyParameter $body
    Write-Host "Uploaded: $($device.'Device Serial Number')"
}

Common Autopilot Failures and Fixes

Failure Root cause Fix
ESP stuck at "Identifying"Device not registered in Autopilot, or profile not assignedVerify hardware hash was uploaded; check group tag and dynamic group membership
ESP stuck at "Securing your hardware"TPM attestation timeout or firmware issueCheck BIOS TPM settings; update firmware; verify TPM 2.0 is enabled
ESP stuck on app installationRequired Win32 app failing; IME errorCheck IME log on device; verify app detection rule; check network access to Azure CDN
ESP times out (default 60 min)Too many/too large Required apps in ESPIncrease timeout to 120 min; reduce blocking app count; move optional apps to Available
"Something went wrong" error 0x800705b4MDM Terms of Use policy conflictRemove duplicate MDM enrollment restrictions; check Intune Terms of Use configuration

Community Perspective

r/Intune on Autopilot failures: The most discussed pain point: "Autopilot ESP stuck at 99% is almost always a Win32 Required app with a broken detection rule. The app installed fine but Intune thinks it failed because the detection script exits 1 instead of 0." A pinned r/Intune thread on this topic has over 400 upvotes and 120 comments from engineers sharing their exact detection rule fixes.
LinkedIn field observations: Autopilot engineers consistently flag one mistake that causes the most pain at scale: not setting the ESP timeout high enough. The default 60-minute timeout fails silently on slow connections or large app payloads. "Set it to 120 minutes in production and you will immediately see your Autopilot failure rate drop by 30-40%."
MVP perspective — Michael Niehaus (Microsoft): Michael Niehaus is the originator and primary architect of Windows Autopilot inside Microsoft. His blog at oofhours.com is the definitive reference for Autopilot troubleshooting, deployment mode selection, and ESP configuration. His most cited guidance: "The ESP is not just a progress screen — it is your compliance enforcement gate. Treat it as such or your Autopilot deployment has a security gap from day one." His PowerShell module Get-WindowsAutoPilotInfo is the standard tool for hardware hash harvesting used by IT teams worldwide.
MVP perspective — Gary Blok (garytown.com): Gary has published extensively on Autopilot pre-provisioning (White Glove) and its interaction with ConfigMgr co-management scenarios. His key insight on pre-provisioning: the technician phase completes the Device ESP but not the User ESP. If your Required apps are user-targeted, they will not install during the technician phase — they will install when the first user logs in. Target critical apps to devices, not users, if you want them pre-staged during the technician phase.
MVP perspective — Ben Reader (powers-hell.com): Ben's work on Autopilot group tags and dynamic group assignment is widely referenced. His recommendation: use a consistent group tag naming convention from day one — for example Country-Role-DeviceType (e.g., UK-Corp-Laptop). Once you have thousands of devices and multiple Autopilot profiles, a consistent tag convention is the only thing that prevents assignment chaos.

Official Resources

Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Autopilot
Windows Autopilot Enrollment Failures: A Structured…
A step-by-step guide for troubleshooting Windows Autopilot enrollment failures — covering…
Intune
Microsoft Intune: Win32 vs. Store App Deployment — Complete Guide
Win32 or Store? Complete breakdown of both Intune app deployment methods — packaging, IME…
Microsoft 365
Microsoft 365 Copilot Auto-Install Block Guide — IT Admin…
Microsoft is pushing the M365 Copilot app to all enterprise Windows devices June 15–July…