HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Autopilot AutopilotOOBEShift+F10MDMDiagnosticsToolEnrollment Status PageIntuneLog CollectionWindows 11

Troubleshooting Autopilot from inside OOBE: Shift+F10, the diagnostics page, and the policy that locks you out

IA
Imran Awan
21 August 2026

A Windows Autopilot deployment that fails during the out-of-box experience (OOBE) produces the least diagnosable device in the estate. There is no desktop. There is no signed-in user. There is no Event Viewer to open, no Company Portal to check, and no local administrator account to elevate with. The device shows a grey error card and nothing else. Everything an administrator would normally reach for sits on the other side of a sign-in that is never going to happen. Getting information out of that box is a different problem from reading Autopilot logs on a working machine. It depends entirely on which doors your organisation left open before the device shipped.

The short version

Microsoft documents three interactive ways into a device that is still inside OOBE: the Shift+F10 command prompt, the Enrollment Status Page (ESP) Collect logs button, and the Windows 11 Windows Autopilot diagnostics page opened with Ctrl+Shift+D. The second and third are both gated by one Intune setting, Turn on log collection and diagnostics page for end users, so a single No closes both at once. The documented way to switch off the OOBE command prompt is not a policy at all. It is an empty tag file at C:\Windows\Setup\Scripts\DisableCMDRequest.TAG, so no Intune report will ever tell you it is there. Organisations that ship that file and also leave the ESP setting off have quietly closed every interactive route into their own failed deployments.

The problem: a black box that cannot tell you why it failed

Most Autopilot troubleshooting guidance assumes you already have the logs. It tells you which file to open and which line to read. That guidance is useful, and this site already carries a full reference for Autopilot MDM log collection. This article is about the step before that one. It is about reaching a device that has never had a desktop.

The distinction matters because the tooling changes completely. On a provisioned device you sign in, open Event Viewer, browse to the Autopilot channel and read it. Inside OOBE you have none of that. You have a keyboard, a screen showing a Microsoft-authored error page, and whatever access routes were enabled before the device left the warehouse. If none were enabled, your only remaining option is to reset the device and hope the failure repeats. That destroys the evidence you needed.

Microsoft documents three interactive routes, plus one collection that runs without you. Each has a different gate. The gates live in three different places and are controlled by three different mechanisms. That is the real reason organisations lock themselves out. Nobody sets out to disable troubleshooting. They tighten one thing for security, leave another at its default, and discover the combination at three in the morning with a shipment of unusable laptops.

Route inWhat it gives youWhat gates it
Shift+F10 command promptA command prompt inside OOBE. Run mdmdiagnosticstool.exe, read files, write output to removable media, restart the device.Presence of the DisableCMDRequest.TAG file in the image. Documented for non-S mode devices.
ESP Collect logs buttonA user-initiated collection when the ESP hits an error or a time-out. The documentation states log files can be copied to a USB drive.ESP setting Turn on log collection and diagnostics page for end users.
Windows Autopilot diagnostics pageA structured on-screen view of provisioning, opened with the View Diagnostics button or Ctrl+Shift+D.The same ESP setting, plus Show app and profile configuration progress set to Yes. Windows 11 and user-driven mode only.
Automatic diagnostic captureLogs collected on the device after an Autopilot failure and uploaded to Intune for an administrator to download.A tenant-wide toggle under Device diagnostics, plus network access to the diagnostics upload endpoint.
Context: two Microsoft pages are authoritative here. The Windows Autopilot troubleshooting FAQ documents the diagnostics page, the Autopilot event channel and the Autopilot registry keys. The Intune article on troubleshooting the Enrollment Status Page documents the Shift+F10 route and the exact mdmdiagnosticstool.exe command line for each Autopilot scenario. Both are linked in the references.

Why it happens: three routes in, three different gates

Route one: the Shift+F10 command prompt

This is the oldest route and still the most capable. Microsoft's ESP troubleshooting article states it plainly: if you are in OOBE on a non-S mode device, press Shift+F10. The Autopilot troubleshooting FAQ uses the same instruction when it explains how to reboot a device to re-download an Autopilot profile, then gives shutdown.exe /r /t 0 as the command to type.

What you get is a command prompt running in the OOBE session, before any user has signed in. That is enormously useful, and it is also the entire security problem. A prompt at that point in setup runs with system-level rights on a device that is not yet under management. Anyone with physical access to a machine sitting at OOBE can reach a privileged shell without presenting a single credential.

Organisations respond by removing the shortcut. The documented mechanism is not a Group Policy Object and not a configuration service provider (CSP). It is an empty file. Microsoft's archived Configuration Manager operating system deployment guidance states it in the reverse direction: delete C:\windows\Setup\scripts\DisableCMDRequest.TAG to enable Shift+F10 command line support in OOBE. When that file is present, the shortcut does nothing.

C:\Windows\Setup\Scripts\DisableCMDRequest.TAG

That folder is not arbitrary. Microsoft documents %WINDIR%\Setup\Scripts\ as the directory Windows Setup searches for SetupComplete.cmd and ErrorHandler.cmd. The tag file sits alongside them, which is why images produced by a Configuration Manager task sequence frequently already contain it. If your Autopilot image began life as task sequence output, assume the file is present until you have checked a device.

Watch out: shipping the tag file without first proving another route works removes your only interactive access to a failed device. It is a file inside an image, not a setting you can flip from a console. Reversing the decision means re-servicing the image or reaching the device with a prompt you have just disabled. Decide before you seal the image, not after the first failure.

Routes two and three: one Intune setting controls both

The ESP Collect logs button and the Windows 11 Windows Autopilot diagnostics page look like two separate features. A single ESP profile setting governs both. Microsoft's wording for Turn on log collection and diagnostics page for end users makes the coupling explicit. Set to No, the collect logs button is not shown to users when an installation error occurs, and the Windows Autopilot diagnostics page is not shown on devices running Windows 11. Set to Yes, both appear.

That is the second half of the self-inflicted lockout. Plenty of organisations leave this setting at No because the words "for end users" read like a data-exposure risk. Combine that choice with the tag file and a failed device offers no prompt, no button and no diagnostics page.

The diagnostics page carries extra conditions worth knowing before you rely on it. Microsoft documents that it also requires Show app and profile configuration progress set to Yes. It is supported only on Windows 11, only in Windows Autopilot user-driven mode, and only when signing in with a work or school account. Personal Microsoft accounts are not supported. A self-deploying kiosk therefore cannot use it at all, which leaves the command prompt and the automatic upload as the only routes for that scenario.

Gotcha: the policy called Prevent access to the command prompt is not the OOBE control, and the two are regularly confused. Microsoft documents it as DisableCMD in the ADMX_ShellCommandPromptRegEditTools area of the Policy CSP, with User scope only and no device scope, backed by the registry key name Software\Policies\Microsoft\Windows\System. It governs whether a signed-in user can run Cmd.exe and batch files. Microsoft documents no CSP and no Group Policy setting that removes the OOBE Shift+F10 prompt. Setting DisableCMD will not close that door, and clearing it will not open one.

Route four: the collection that happens without you

Intune's collect diagnostics device action has an Autopilot behaviour many teams have never used. Microsoft documents that it can be configured to automatically collect and upload Windows device logs upon a Windows Autopilot failure. When a failure occurs, logs are processed on the failed device and then automatically captured and uploaded to Intune. The documented limits are one set of logs per device per day, up to ten collections stored per device, and 28 days of retention before deletion.

This is the route that survives the Shift+F10 block, because it needs no keyboard and no user. Microsoft documents it as enabled by default. It also has a hard dependency that a tightly filtered OOBE network will break: the diagnostics upload endpoint must be reachable. The Autopilot FAQ names lgmsapeweu.blob.core.windows.net specifically, and the collect diagnostics article lists a longer set of regional blob storage endpoints by tenant geography. If your provisioning network allows only the Autopilot and enrolment endpoints, this route fails quietly. You find out when you go looking for a collection that never arrived.

How to verify: confirm your access before a device fails

Every check below can be run on a reference device today, on the bench, before you have a problem. That is the whole point. Verifying troubleshooting access after a failed deployment is too late by definition.

Check the tag file and the tool

Start with the file that decides route one. Then confirm that mdmdiagnosticstool.exe is present, because every documented in-OOBE collection command depends on it. Both checks are one line each.

Command Prompt — opened in OOBE with Shift+F10
C:\Windows\System32> dir %WINDIR%\Setup\Scripts\DisableCMDRequest.TAG # File Not Found is the healthy answer here. If the file IS listed, then you # are only seeing this prompt because the image has not been sealed yet. File Not Found C:\Windows\System32> where mdmdiagnosticstool.exe C:\Windows\System32\mdmdiagnosticstool.exe # In box on supported Windows builds. If this is missing, no in-OOBE # collection command in the Microsoft docs will work. C:\Windows\System32> mdmdiagnosticstool.exe -area Autopilot -cab D:\CONTOSO-1234-autopilot.cab # D: is a USB stick. Writing straight to removable media is the only practical # way off a device that has no user session and no OneDrive.

The documented command lines differ by scenario. Microsoft's ESP troubleshooting article gives one for user-driven mode and a different one for self-deploying, pre-provisioning and any other scenario involving a physical device. The Collect MDM logs article gives a broader multi-area form that writes a zip file instead of a cabinet file.

ScenarioDocumented commandWhere it lands
Autopilot user-driven modemdmdiagnosticstool.exe -area Autopilot -cab <pathToOutputCabFile>The path you supply
Self-deploying, pre-provisioning, any physical-device scenariomdmdiagnosticstool.exe -area Autopilot;TPM -cab <pathToOutputCabFile>The path you supply
Runtime provisioning packagesmdmdiagnosticstool.exe -area DeviceProvisioning -cab <pathToOutputCabFile>The path you supply
Broad enrolment, provisioning and Autopilot sweepmdmdiagnosticstool.exe -area "DeviceEnrollment;DeviceProvisioning;Autopilot" -zip "c:\users\public\documents\MDMDiagReport.zip"C:\Users\Public\Documents\MDMDiagnostics
Tip: the switches Microsoft documents on these pages are -area, -cab and -zip. A -out switch is widely repeated in community write-ups but does not appear in the Microsoft articles referenced here, so treat it as undocumented rather than supported. Stick to -cab or -zip with an explicit path and you always know where the output went.

Check the registry surfaces that survive a failure

Three registry locations tell you what the device knew and how far it got. All three are documented, and all three land in MDMDiagReport_RegistryDump.reg inside the collected archive. That means you can read them from a cabinet file on your own workstation, without touching the failed device again.

Shared parent key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
SubkeyWhat it holdsWhat to read first
Provisioning\Diagnostics\AutopilotThe Autopilot profile settings the device received from the deployment service.IsAutopilotDisabled, TenantMatched, CloudAssignedTenantDomain, CloudAssignedOobeConfig
Windows\Autopilot\EnrollmentStatusTrackingThe EnrollmentStatusTracking CSP data, meaning which apps and policies the ESP tracked and the state of each.The Device subkey, the ESPTrackingInfo subkey, and whether a user security identifier (SID) subkey exists at all
Enrollments\{EnrollmentGUID}\FirstSyncThe ESP settings the device actually received, including any phase skip flags.SkipDeviceStatusPage and SkipUserStatusPage

The absence of the user SID subkey under EnrollmentStatusTracking is a strong signal in its own right. Microsoft documents that this subkey is created in the account setup phase, and that it will not be created if the device setup phase fails. If it is missing, the failure happened before the user phase ever began.

Registry Editor
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
|- Provisioning\Diagnostics\Autopilot   IsAutopilotDisabled = 0x00000000
|- Provisioning\Diagnostics\Autopilot   TenantMatched = 0x00000001
|- Windows\Autopilot\EnrollmentStatusTracking
|- Device
|- ESPTrackingInfo
|- S-1-5-21-REDACTED-USER-SID   (present only once account setup starts)
|- Enrollments\{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}\FirstSync

Check the Autopilot event channel

Microsoft documents a dedicated Autopilot event channel. It is the fastest way to answer whether the device ever received a profile, which is the single most common OOBE failure class. You read it from the collected event log files on your own machine, and Microsoft advises that the machine viewing the logs should match the build the logs came from.

Channel: Applications and Services Logs > Microsoft > Windows > ModernDeployment-Diagnostics-Provider > Autopilot
Event IDTypeDocumented meaning
100WarningAutopilot policy not found. Typically temporary while the device waits for a profile download.
101InfoA numeric OOBE setting was retrieved and processed from the profile.
103InfoA string OOBE setting was retrieved, such as the Microsoft Entra tenant name.
109InfoA state-related OOBE setting override was retrieved and processed.
111InfoProfile settings controlling OOBE behaviour were retrieved successfully.
153InfoAutopilotManager state change. Usually ProfileState_Unknown to ProfileState_Available, meaning a profile downloaded.
160InfoAutopilotRetrieveSettings beginning acquisition.
161InfoThe Autopilot profile downloaded successfully.
163InfoDownload not required, the device is already provisioned. Clean or reset the device to change this.
164InfoInternet determined available to attempt a policy download.
171ErrorFailed to set TPM identity confirmed. Indicates a Trusted Platform Module attestation problem needed for self-deploying mode.
172ErrorFailed to set the Autopilot profile as available. Typically related to event 171.
807ErrorZtdDeviceIsNotRegistered. Check the hardware hash upload and the profile assignment.
809ErrorZtdDeviceHasNoAssignedProfile, assigned profile does not exist. The assigned profile was deleted without cleanup.
815ErrorZtdDeviceHasNoAssignedProfile, no profile assigned and no default profile in the tenant.
908ErrorSerialNumberMismatch or ProductKeyIdMismatch between the Autopilot record and the physical hardware.
Event Viewer — ModernDeployment-Diagnostics-Provider / Autopilot (opened from a collected log file)
LevelIDMessage
Warning100Autopilot policy not found
Info160AutopilotRetrieveSettings beginning acquisition
Info161AutopilotManager retrieve settings succeeded
Info153State changed from ProfileState_Unknown to ProfileState_Available
Error171Failed to set TPM identity confirmed. HRESULT=[error code]

Check the two Intune-side gates

Now confirm what the service will offer a failing device. The ESP profile controls routes two and three.

intune.microsoft.comDevices › Device onboarding › EnrollmentWindows › Windows AutopilotEnrollment Status Page
  1. Sign in to the Microsoft Intune admin center.
  2. Select Devices, expand Device onboarding, then select Enrollment.
  3. On the Windows tab, under Windows Autopilot, select Enrollment Status Page.
  4. Open the profile that actually applies to your Autopilot devices. If several exist, remember that priority 1 is highest, and that a device-targeted profile is applied before a user-targeted one.
  5. Select Properties, then select Edit next to Settings.
  6. Read Show app and profile configuration progress and Turn on log collection and diagnostics page for end users. Both must be Yes for the Windows 11 diagnostics page to appear.

The tenant-wide diagnostics toggles control route four. There are two of them and they are separate.

intune.microsoft.comTenant administrationDevice diagnostics
  1. Sign in to the Microsoft Intune admin center.
  2. Select Tenant administration, then select Device diagnostics.
  3. Confirm the control for device diagnostics on corporate-managed Windows devices is Enabled. That is the general collect diagnostics action.
  4. Confirm the control for automatically capturing diagnostics on an Autopilot failure is Enabled. That is the one that rescues you when no keyboard route exists.
Tip: the companion script for this article performs the on-device half of these checks in one read-only pass, and can optionally read the ESP profile settings from Microsoft Graph with a read-only scope. Run it on a reference device before the image is sealed, then again on a freshly provisioned device off the production line.

The fix: keep one documented route open on purpose

The fix is not "leave Shift+F10 enabled". For many organisations blocking it is a genuine and reasonable security decision. The fix is to make the decision explicit, and to guarantee that closing one route does not close all of them.

If you block the OOBE command prompt, do these three things first

  1. Turn on ESP log collection. Set Turn on log collection and diagnostics page for end users to Yes on the ESP profile that actually applies. Microsoft's own guidance recommends turning this on because the user's logs and diagnostics could aid with troubleshooting. Pair it with Show app and profile configuration progress set to Yes so the Windows 11 diagnostics page works too.
  2. Leave automatic Autopilot diagnostic capture enabled, and unblock its endpoint. The toggle being on is not enough on its own. Confirm the regional diagnostics blob storage endpoints for your tenant geography are reachable from the provisioning network, not only from the corporate LAN.
  3. Write down how the tag file is reinstated after a reset. Community research from Rudy Ooms shows the file does not survive a Windows reset without extra work, so a reset device can end up with the prompt available again. Whichever way your organisation handles that, the behaviour should be documented rather than discovered.

The Intune and CSP route for the command prompt policy

If your intent is to stop signed-in users from opening a command prompt on the finished desktop, that is a different and fully supported control. It is a user-scoped ADMX-backed policy.

intune.microsoft.comDevices › Manage devices › ConfigurationCreate › Windows 10 and laterTemplates › Custom
  1. Create a custom profile for Windows 10 and later.
  2. Add an OMA-URI setting of ./User/Vendor/MSFT/Policy/Config/ADMX_ShellCommandPromptRegEditTools/DisableCMD.
  3. Set the data type to String. This is an ADMX-backed policy, so the payload must be the XML-encoded enable or disable fragment rather than a bare boolean value.
  4. Assign the profile to a user group, because Microsoft documents this policy with no device scope.

The equivalent Group Policy path is User Configuration > Administrative Templates > System > Prevent access to the command prompt, from Shell-CommandPrompt-RegEditTools.admx. Microsoft documents the registry key name behind it as Software\Policies\Microsoft\Windows\System.

Context: Microsoft's documentation also warns not to prevent the computer from running batch files if it uses logon, logoff, startup or shutdown batch file scripts. That is a real consideration in environments that still lean on script-driven configuration, and it is a good reason to scope this policy narrowly rather than tenant-wide.

The image and unattend route for the OOBE prompt

There is no console path for this one, and that is the single most important thing to internalise. The OOBE command prompt is governed by whether a file exists in the image. You place it, or remove it, at image build or servicing time in %WINDIR%\Setup\Scripts\. The same folder holds SetupComplete.cmd, which Microsoft documents as running with local system permissions immediately after the user sees the desktop, and ErrorHandler.cmd, which runs automatically when Setup encounters a fatal error. Setup logs the SetupComplete.cmd action to C:\Windows\Panther\UnattendGC\Setupact.log.

That last path is worth remembering separately, because Intune's diagnostic collection gathers it. If you ever need to prove what ran at the end of Setup on a device you cannot log into, that file is inside the collected archive.

Getting logs off a device with no user session

This is the part people forget to plan. Collecting a cabinet file is only half the job on a device with no signed-in user, no mapped drive and no OneDrive.

Command Prompt — in OOBE, writing straight to removable media
C:\Windows\System32> wmic logicaldisk get deviceid,drivetype,volumename # drivetype 2 is removable. Confirm the letter BEFORE you collect, because a # wrong path leaves you with a cab you cannot retrieve. DeviceID DriveType VolumeName C: 3 Windows D: 2 USB-COLLECT C:\Windows\System32> mdmdiagnosticstool.exe -area "DeviceEnrollment;DeviceProvisioning;Autopilot" -zip D:\CONTOSO-1234-mdm.zip # The multi-area form. Produces MDMDiagHtmlReport.html, MDMDiagReport.xml, # MdmDiagReport_RegistryDump.reg, MdmDiagLogMetadata.json and the event logs. C:\Windows\System32> dir D:\*.zip # Always confirm the archive exists on the stick before you reset the device. # A reset destroys the only copy of the evidence.

The ESP Collect logs button covers the same need without a command prompt. Microsoft's ESP troubleshooting article states that when a time-out occurs in the ESP the user can select the option to Collect logs, and that log files can be copied to a USB drive. That is the documented off-device path for a non-technical user standing in front of a failed laptop, and it exists only if the ESP setting is Yes.

Gotcha: the familiar Settings > Accounts > Access work or school > Info > Create report route, which writes to C:\Users\Public\Documents\MDMDiagnostics, needs a signed-in session. It is a post-provisioning tool. Do not build your OOBE runbook around it, because on a device stuck in OOBE the Settings app is not reachable.

Proof it worked: what an accessible device looks like

The proof you want is boring. It is a device where every route reports open, checked before it mattered. The companion script produces exactly that summary in one read-only pass.

PowerShell — Get-OobeTroubleshootingAccess.ps1 (illustrative output, not a live run)
PS C:\> .\Get-OobeTroubleshootingAccess.ps1 === OOBE troubleshooting access report === OS : Windows 11 Enterprise build 26100 Device : CONTOSO-1234 [ROUTE 1] Shift+F10 command prompt DisableCMDRequest.TAG : NOT PRESENT OOBE command prompt expected to work mdmdiagnosticstool.exe : PRESENT C:\Windows\System32\mdmdiagnosticstool.exe DisableCMD policy (HKCU) : not configured DisableCMD policy (HKLM) : not configured # DisableCMD is documented as User scope only. An HKLM value here would be a # local customisation, not a documented Microsoft policy surface. [DIAGNOSTIC SURFACES] Autopilot event channel : PRESENT ModernDeployment-Diagnostics-Provider/Autopilot Autopilot profile key : PRESENT IsAutopilotDisabled=0 TenantMatched=1 EnrollmentStatusTracking : PRESENT Device, ESPTrackingInfo, S-1-5-21-REDACTED FirstSync enrollment key : PRESENT 1 enrollment GUID found [MDM DIAGNOSTIC OUTPUT LOCATIONS] Users\Public\Documents\MDMDiagnostics EXISTS newest: MDMDiagReport.html Windows\Temp\MDMDiagnostics EXISTS newest: mdmlogs-2026-08-19.cab ProgramData\Microsoft\IntuneManagementExtension\Logs EXISTS 14 file(s) Windows\Logs\Panther\UnattendGC\setupact.log EXISTS Windows\Logs\SetupDiag\SetupDiagResults.xml NOT FOUND # NOT FOUND on the last line is normal on a device that had no Setup failure. VERDICT: at least one in-OOBE route is open on this device.

Read that output as three independent answers. Route one is open if the tag file is absent and the tool is present. The diagnostic surfaces block tells you the device will actually have something to report when it fails. The output locations block tells you where to look after a collection. The verdict line is the one to paste into a build sign-off checklist.

On the service side, the equivalent proof is a diagnostics collection that arrived without anyone touching the device. After an Autopilot failure on a device with automatic capture enabled, the collection appears against the device record and can be downloaded as a zip file.

Microsoft Intune admin center — Devices › All devices › device › Diagnostics
Device nameCONTOSO-1234
Collection triggerAutopilot failure, automatic
StatusCompleted
Action availableDownload

If that row never appears after a genuine failure, you have found a network problem rather than an Autopilot problem. Check the diagnostics blob storage endpoints for your tenant geography before going any further.

References

Microsoft-official sources, each fetched and confirmed:

Community deep-dives, both fetched and confirmed on topic:

AuthorArticleWhy it is worth reading
Rudy OomsThe OOBE Massacre: The Beginning of Shift F10Walks through making the DisableCMDRequest.TAG block persist across both Windows reset scenarios, which is the gap most implementations leave open.
Mattias Melkersen and contributorsIntune Debug ToolkitCommunity tooling for seeing what is actually applying during the device ESP and user ESP phases, which is the question you are usually trying to answer from inside OOBE.

Companion script: Get-OobeTroubleshootingAccess.ps1. It is read-only, ASCII-only, runs on both Windows PowerShell 5.1 and PowerShell 7, prompts before installing any module, and aborts rather than reporting a clean result after a failed query.

PowerShell — companion script

Download it from Imran76Awan/Windows-Autopilot-Scripts — no sign-in required. It is read-only: it reports and never changes a device or anything in Intune. Validate it in your own environment before relying on the output.

Get-OobeTroubleshootingAccess.ps1 — Reports which documented in-OOBE Autopilot troubleshooting routes are open on this device.
View all scripts on GitHub
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Autopilot
Autopilot pre-provisioning: the reseal step is the part everyone…
The green success screen at the end of an Autopilot technician flow confirms enrollment,…
Autopilot
The ESP device phase and user phase are two different machines:…
The Enrollment Status Page runs its device preparation and device setup phases in device…
Autopilot
Enrollment Configuration Priority: Why Your Second ESP Profile…
Device configuration profiles merge. Device enrollment configurations do not. Exactly one…