HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links★ Pro Subscribe free
← Back to Blog
Autopilot Windows AutopilotHardware HashIntuneDevice RegistrationOOBETPMSMBIOSEndpoint Management

Your Autopilot Device Came Back From Repair and Won't Enroll — Here's Why

IA
Imran Awan
21 August 2026

A laptop goes out for a hardware repair. It comes back, the user turns it on, and instead of your company's branded sign-in screen, they get a plain, generic Windows setup screen — the kind you'd see on a brand-new machine (this first-run screen is called the "out-of-box experience," or OOBE for short). No branding, no automatic enrollment, nothing.

You check Intune. The device is still there, still listed under the right serial number. So it looks fine. But it isn't — the device is orphaned: it exists in your records, but Windows Autopilot (the service that recognizes a device and automatically sets it up for your company) no longer recognizes it as the same machine.

Watch this post — YouTube walkthrough

Watch on YouTube · Subscribe at @EndpointWeekly

🎤 Podcast episode
Your Autopilot Device Came Back From Repair and Won't Enroll — Here's Why

This happens because of a common misunderstanding about how Autopilot actually identifies a device. Most people assume it works like a serial number: one fixed value that stays the same forever. It doesn't. Autopilot identifies a device using something called the hardware hash — sometimes nicknamed the "4K hash" because of its size (it's a block of text about 4,000 characters long). It's built from several hardware and firmware details combined together, it looks slightly different every single time you read it, and Autopilot doesn't need an exact match to recognize a device — it allows for some difference. Once you understand those three things, repair scenarios stop being confusing and become predictable.

The short version

The Autopilot hardware hash is not a serial number — it's a combination of several hardware and firmware identifiers. Microsoft documents which details feed into it, but says clearly that you can't take the hash apart to read those details back out, so treat any "here's what's inside the hash" guide with suspicion. The hash also looks different every time you read it, and Autopilot's matching allows for some tolerance — which is why swapping a hard drive still works, but swapping a motherboard or the security chip (TPM) does not. And contrary to popular belief, wiping or reinstalling Windows on a device does not break its Autopilot registration — so stop removing devices from Autopilot just because you're rebuilding them.

Decision flow diagram: will Autopilot recognize your repaired device

The problem: a repaired device Autopilot no longer recognizes

Here's the pattern, and it's easy to misread if you don't know what to look for. A device goes out for a hardware repair — say, a new motherboard. It comes back, boots up, connects to the network, and shows the generic Windows setup screen instead of your company's branded one. No user is assigned, no company apps install, nothing happens automatically. Meanwhile, if you look the device up in Intune by its serial number, it's still sitting there in your device list — which is exactly what tricks people into assuming everything is fine.

Here's what that actually looks like on the physical machine. Both of these are real captures from a repaired device that lost its Autopilot identity:

Generic Windows out-of-box setup screen showing a sign-in failure instead of company branding
The generic, unbranded setup screen a repaired device shows instead of your company's sign-in page. The "Eine Anmeldung ist nicht möglich" (sign-in isn't possible) message is the device failing to resolve a company identity.
Windows enrollment error screen reading Something went wrong, this device is already enrolled, error code 8018000a
A related but distinct error you may see instead: "This device is already enrolled," error 8018000a. This happens when stale enrollment data from the device's old identity conflicts with a fresh setup attempt — exactly what can happen if a repair skips a clean deregistration first.

Sometimes Intune gives you a clearer warning. In the Autopilot device list, the Profile status column will show Fix pending or Attention required instead of the normal Assigned. Microsoft's own documentation says both of these messages mean the same thing: a hardware change was detected on the device. If you click the Fix pending link, you'll see this exact message:

Windows Autopilot devices list showing Profile status Attention required
A real Autopilot device list — three devices showing "Attention required" instead of "Assigned." Serial numbers and purchase orders redacted.
"We've detected a hardware change on this device. We're trying to automatically register the new hardware. You don't need to do anything now; the status will be updated at the next check in with the result."

That message sounds reassuring, but in practice it's often wrong. Microsoft's own guidance says that if the status stays on Fix pending for a long time, or changes to Attention required, waiting won't fix it — you have to step in and manually remove and re-add the device (covered in the fix below).

Gotcha: The serial number shown in the Intune Autopilot device list is the one recorded when the device was first registered — not necessarily the serial number in the device's firmware right now. In other words, a row that looks perfectly normal tells you nothing about whether Autopilot can still recognize the physical machine sitting in front of you. This one detail alone causes an enormous amount of wasted troubleshooting time.

There's a second, trickier version of this problem. Microsoft documents that Autopilot's setup profile won't apply if a hardware change happens and the device gets reimaged with an old version of Windows (older than Windows 11 21H2 with a specific update, or older than Windows 10 22H2). Microsoft says this is expected behavior — not a bug. So if your repair vendor reimages the device using an outdated company image, you can hit this problem even when the hardware repair itself would have been fine on its own.

Why it happens: what the hash actually is, and how matching works

To predict which repairs will break Autopilot and which won't, you need to understand three facts about the hardware hash. All three are documented by Microsoft, and all three go against the common assumption that the hash is basically a fancy serial number.

Fact one: it's built from several different identifiers, not one

Microsoft's own documentation says the hardware hash contains details like the manufacturer, the model, the device's serial number, the hard drive's serial number, information about when the hash was created, and "many other attributes that can be used to uniquely identify the device."

The Autopilot FAQ is more specific about the minimum requirement. Every hardware hash a manufacturer submits must include a unique firmware ID (called the SMBIOS UUID), the network card's MAC address, and a unique disk serial number. The reasoning is simple: there's no single ID that reliably and uniquely identifies every Windows device, so Microsoft combines several fields together as the next best thing.

The same FAQ lists the specific fields a manufacturer's firmware needs to get right for the hash-generation tool to work properly. This table is the closest thing to an official "ingredients list" for the hash that exists:

FieldWhat it identifiesSurvives a motherboard swap?
SmbiosSystemManufacturerManufacturer name, from firmwareOnly if the repair centre rewrites it
SmbiosSystemProductNameModel name, from firmwareOnly if rewritten
SmbiosSystemSerialNumberChassis serial numberOnly if rewritten
SmbiosSkuNumberManufacturer's internal stock numberOnly if rewritten
SmbiosSystemFamilyProduct family nameOnly if rewritten
SmbiosUuidA unique ID built into the firmwareNo — this lives on the motherboard itself
MacAddressThe built-in network card's permanent addressNo, if the network card is part of the motherboard
DiskSerialNumberSerial number of the storage driveYes, if the same drive is reused
ProductKeyIDA digital product key stored in firmwareNo — a new one gets injected during repair
TPM and EkPubThe security chip's built-in identity keyNo, and it physically cannot be copied to a new chip

That last row explains most repair outcomes. Microsoft's own motherboard-replacement guidance notes that even if a repair centre copies all the old device details onto a new motherboard, they cannot copy the TPM's identity key — the private half of that key never leaves the original chip. A new motherboard means a new TPM, which means a new identity key. That's why swapping the motherboard (or just the TPM chip) is treated as a brand new device, full stop.

Context: If you're curious how Microsoft's own tooling reads two of these values: the disk serial number comes from a low-level Windows storage query, and the MAC address comes from a low-level network query that specifically reads the network card's permanent, factory-set address — not whatever address you might have configured in software. That's an important distinction: changing your MAC address in software does nothing to the hash Autopilot sees.

If a device has more than one network card or more than one disk, Microsoft documents that all of them get factored in — but the system disk's serial number carries more weight than any secondary disk, removable network adapters are ignored, and it doesn't matter whether the network connection is wired or wireless.

Fact two: the hash is deliberately impossible to take apart

You'll come across blog posts online claiming to show exactly which part of the hash contains which piece of data — a byte-by-byte map. Treat those claims with real skepticism. Microsoft's own documentation for the technical interface that exposes this hash on a live device says, in plain terms, that it's "a raw blob used to identify a device in the cloud. It's not meant to be human readable by design and you can't parse the content to get any meaningful hardware information."

Watch out: Microsoft has never published an official field-by-field breakdown of the hash, and it has never published the exact matching algorithm either. Any tool or article claiming to decode it is working from reverse-engineering, not documentation — and it can silently break the next time Microsoft changes something. Don't build any process (asset tracking, compliance checks, anything) on top of a "decoded" hash. Read the underlying details from their real, documented sources instead — which is exactly what the companion script for this post does.

Fact three: the hash changes every time you read it, and matching allows for that

This is the fact that changes everything else. Microsoft states plainly that "the hardware hash changes each time it's generated because it includes details about when it was generated." In other words, this isn't a fixed ID you can check for an exact match — it's a snapshot that includes a timestamp, so it's different every single time.

Because of that, Autopilot can't just check "does this hash exactly equal that hash." It has to allow for some difference. Microsoft's documentation confirms this directly: the matching process accounts for the fact that the hash changes on every read, and it also tolerates larger changes — like swapping a hard drive — and still finds a match. But a genuinely large change, like a new motherboard, won't match, and a fresh hash has to be captured and uploaded.

You can see this changeability yourself in a few seconds. Reading the exact same value twice in a row, on a completely untouched machine, gives you two different strings of text:

PowerShell — on the device (run elevated)
$q = { (Get-CimInstance -Namespace 'root/cimv2/mdm/dmmap' ` >> -ClassName MDM_DevDetail_Ext01 ` >> -Filter "InstanceID='Ext' AND ParentID='./DevDetail'").DeviceHardwareData } $a = & $q ; Start-Sleep -Seconds 2 ; $b = & $q "Length A = " + $a.Length + " Length B = " + $b.Length Length A = 4000 Length B = 4000 # Healthy: the length stays identical every time. "Identical strings? " + ($a -eq $b) Identical strings? False # False here is CORRECT - the hash embeds its own creation time. # If you ever see True, you read a cached copy, not a fresh one.

On the test device used for this article, the hash was consistently 4,000 characters long — about 1,714 of those characters were real data, and the rest was padding at the end. Those exact numbers will vary machine to machine; Microsoft doesn't document them as fixed. The one thing that is documented and reproducible is simply that the text changes every time you read it.

Tip: That trailing padding is just filler, not real data — it's harmless. This is also the root cause of a classic import problem: on the device itself, the hash is stored without that padding filled in properly, but when you import it into Autopilot, it expects the padding to be there. If the two don't line up, the import fails silently, and if you're watching network traffic you'll see an error reading Cannot convert the literal '[DEVICEHASH]' to the expected type 'Edm.Binary'.

The myth: reinstalling Windows does not break your Autopilot registration

Here's a correction that will save you a lot of unnecessary work. A lot of people believe that wiping or reinstalling Windows on a device breaks its Autopilot registration. Microsoft's documentation says the opposite, in three separate places.

The FAQ directly asks: do you still get the Autopilot experience after wiping a machine and restarting it? The answer is yes, as long as the device is still registered and running a supported version of Windows. It also asks whether Autopilot survives a motherboard replacement or a full reimage, and again answers yes (for the reimage case — motherboard replacement has its own process, covered below).

The reason this works is structural. Your Autopilot registration lives in Microsoft's cloud service. The device's identity lives in its hardware and firmware. Neither of those two things has anything to do with what's installed on the hard drive. In fact, the Autopilot setup profile isn't even stored permanently on the device — Microsoft states it's downloaded fresh during setup, applied, and then thrown away.

Context: One thing on the software side does matter here. There's a specific event log entry (Event ID 163) that reports "the setup profile download wasn't needed because this device is already provisioned" — meaning a cached copy of the profile is sitting on the device already. If you need to force a fresh download, you have to clean or reset the device first. Running Sysprep /Generalize usually clears that cached profile too. So a stuck cached profile is an imaging cleanliness problem, not an Autopilot registration problem.

The repair outcomes, at a glance

Microsoft has published a tested table of repair scenarios and what happens to Autopilot in each case. This is worth memorizing:

What was changedDoes Autopilot still recognize it?What you need to do
Memory, power supply, graphics card, card reader, sound card, expansion card, microphone, webcam, fan, heat sink, battery (CMOS)No effectNothing
Hard drive replaced, everything else keptStill matchesNothing
Reimaged or reset, no hardware changedStill registeredNothing
One built-in network card replacedProbably still matchesRecapture the hash only if it fails
Motherboard replacedTreated as a new deviceRemove and re-add the device
Security chip (TPM) replacedTreated as a new deviceRemove and re-add the device
Motherboard replaced, and a second network card kept from the old boardNot supportedAvoid this setup entirely
A non-manufacturer network card addedNot supportedUse the built-in network card instead
Motherboard replaced, but device info wasn't written to the new firmwareWon't be recognizedRepair centre needs to write the correct firmware data

The second-network-card row is worth a closer look, because the reason behind it is genuinely useful to understand. Microsoft explains that in that specific scenario, the device's identity "won't be stable until after TPM attestation is complete" — and even then, having two possible MAC addresses (one from the old board's leftover card, one from the new board) creates real ambiguity about which one is correct.

Watch out: Never take parts out of one Autopilot-registered device and put them into another device while keeping both devices registered. Microsoft warns this can leave you with two devices that Autopilot can no longer tell apart. If you need to reuse parts, remove ("deregister") the donor device from Autopilot first, and never register it again afterward.

How to verify: check the hash, the registry, and the event log

Verification has two parts. First, confirm the device can even produce a valid hash. Second, compare its key identifying details against what Microsoft's service has on record for it.

What if the device won't let you sign in at all?

Everything in this section assumes you can get to an elevated PowerShell prompt. That's easy on a device that's already working — sign in, right-click Start, choose Windows Terminal (Admin). It is not obvious at all on a device stuck on the exact screens earlier in this post: the generic sign-in page, or the "This device is already enrolled" error. There's no desktop, no local admin account you can sign into yet, nothing to right-click.

Windows has a documented way in anyway: press Shift+F10 at that screen. This opens a command prompt running with SYSTEM-level rights, before any user has signed in — higher privilege than a normal administrator session, and more than enough to run every check in this post. From that prompt, type:

Command Prompt — opened via Shift+F10 at OOBE, before sign-in
C:\WINDOWS\system32> powershell Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. # You're now in a SYSTEM-level PowerShell session, before any sign-in.

There's no browser at this screen, so you can't copy-paste the script from GitHub or reliably reach it over a proxy. The practical fix technicians use: keep the script on a USB drive and run it directly from there, writing the report back to the same drive so you can carry it away with you:

PowerShell — running the script from a USB drive at OOBE
D: .\Get-AutopilotHardwareHashReport.ps1 -OutputHtml D:\report.html # Drive letter will vary - check with `Get-Volume` or `wmic logicaldisk get caption` first.
Watch out: This route can be, and sometimes deliberately is, switched off. Organisations that ship a Shift+F10 prompt at OOBE are also handing anyone with physical access to that device a privileged shell with zero credentials, so some images intentionally disable it. The mechanism isn't a policy you can check remotely — it's a marker file baked into the image: C:\Windows\Setup\Scripts\DisableCMDRequest.TAG. If that file exists, Shift+F10 does nothing at all. This is common on images that started life as a Configuration Manager task sequence. Test whether your own deployment image allows this before you're standing in front of a real failed device and need it — not after.

This is genuinely a separate, deeper topic — there are actually three different interactive routes into a device stuck at OOBE (Shift+F10 is only the most capable one), and each is gated by a different, easy-to-miss setting. The full breakdown, including the other two routes and exactly which Intune setting controls them, is covered in Troubleshooting Autopilot from inside OOBE.

Read the hash on a live device

The hash is exposed through a low-level Windows configuration interface, at a location called ./DevDetail/Ext/DeviceHardwareData. This has existed since an early 2017 Windows update. On a running device, you can read it through PowerShell using the exact query Microsoft's own material uses:

Administrator: Windows PowerShell
Get-CimInstance -Namespace 'root/cimv2/mdm/dmmap' `
>>   -ClassName MDM_DevDetail_Ext01 `
>>   -Filter "InstanceID='Ext' AND ParentID='./DevDetail'" |
>>   Select-Object InstanceID, ParentID,
>>     @{ n='HashLength'; e={ $_.DeviceHardwareData.Length } }

InstanceID  ParentID      HashLength
----------  --------      ----------
Ext         ./DevDetail         4000

# The length stays the same. The content itself does not.
Gotcha: This needs an elevated (Administrator) PowerShell window. If you run it without elevation, you'll get back an empty or failed result — which looks exactly the same as a genuinely broken device with no hash at all. Those two situations need completely different responses, so always double-check you were running as Administrator before you trust a blank result.

If the hash really is missing, the documented cause is missing firmware information — specifically, both the manufacturer name and serial number need to be present in firmware, or the device simply can't be registered. Here's the exact check Microsoft recommends:

PowerShell output of Get-CimInstance Win32_BaseBoard showing Manufacturer and SerialNumber
Real output of the minimum-firmware-fields check — both Manufacturer and SerialNumber are present, which is the healthy state. Serial number redacted.
PowerShell — checking the minimum firmware fields (run elevated)
Get-CimInstance Win32_BaseBoard | Select-Object Manufacturer, SerialNumber Manufacturer SerialNumber ------------ ------------ CONTOSO (blank) # Broken: a blank SerialNumber means this device can't be registered. # Healthy looks like: CONTOSO AB1234XY # Both manufacturer AND serial number must be present.

Other ways to collect the hash

Microsoft documents four different ways to collect this hash, and it's worth knowing all of them, because a repair centre often won't have your specific tooling installed. You can use Configuration Manager, which does this automatically for existing devices. You can use the Get-WindowsAutopilotInfo PowerShell script (covered in detail in the fix below). On Windows 11, you can press CTRL + SHIFT + D during the initial setup screen to open a diagnostics page that exports a CSV containing the hash. Or you can export it from within a running copy of Windows:

Settings›Accounts›Access work or school›Export your management log files›Export

The exported files land in C:\Users\Public\Documents\MDMDiagnostics. You can jump straight to that settings page by running ms-settings:workplace.

Tip: Always use the -OutputFile parameter with Get-WindowsAutopilotInfo rather than manually redirecting the output to a file — Microsoft specifically warns that manual redirection breaks the file's formatting. A few other CSV rules that trip people up: no quotation marks, no extra columns, plain text only (not Unicode), headers must match exactly (case-sensitive), and never open and re-save the file in Microsoft Excel — that silently corrupts it.

Check the device's own registration record

The device keeps a local cached copy of what Autopilot last told it. Microsoft documents these values under a single location in the Windows registry (a settings database built into Windows):

HKLM\SOFTWARE\Microsoft\Provisioning\Diagnostics\Autopilot
ValueWhat it meansWhat to look for
IsAutopilotDisabledSet to 1 when the device is not registered with AutopilotSeeing 1 on a device you believe is registered means the match failed, or the profile couldn't download
CloudAssignedTenantDomainThe company domain this device is registered underBlank means this device isn't registered with Autopilot at all
CloudAssignedTenantIdThe unique ID of that company's tenantBlank means not registered
AadTenantIdThe tenant ID of whoever signed in on this deviceIf this doesn't match the assigned tenant, the user sees an error
TenantMatchedSet to 1 when the signed-in user's tenant matches the registered tenant0 means the user gets an error and has to start over
CloudAssignedOobeConfigA combined code representing which setup options are configuredDocumented bit values: skip Cortana sign-up = 1, remove local admin = 2, skip express settings = 4, skip manufacturer registration = 8, skip license agreement = 16
Registry Editor showing HKLM Software Microsoft Provisioning Diagnostics Autopilot values
The real registry location on a live, registered device. Tenant-identifying values (domain, tenant ID, correlation ID, MDM ID) redacted — everything else is genuine.

Read the event log

Autopilot writes its own dedicated event log. In Event Viewer, open Applications and Services Logs, then Microsoft, then Windows, then ModernDeployment-Diagnostics-Provider, then Autopilot. If you're reading it via PowerShell, the full channel name is:

Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Autopilot
Event IDWhat it saysWhat it tells you
100Warning: setup policy not foundUsually just a temporary state while waiting for a profile to download
101Info: a numeric setting was retrieved successfullyNumeric setup options being processed
103Info: a text setting was retrieved successfullyText setup options, like the company name, being processed
109Info: setup override setting retrievedState-related setup options being processed
111Info: settings retrieval succeededThe setup profile controlling first-run behavior was retrieved
153Info: internal state changedGoing from "unknown" to "available" means a profile downloaded and the device is ready
160Info: beginning to fetch settingsProfile download starting
161Info: settings retrieved successfullyProfile downloaded successfully
163Info: download skipped, already set upA profile is already cached locally — clean or reset the device if you need a fresh one
164Info: internet connection availableConfirms the device can reach the internet
171Error: couldn't confirm TPM identityA security-chip (TPM) problem — this is the key error after most repairs
172Error: couldn't mark the setup profile as availableUsually shows up right after event 171
807Error: device isn't registeredMicrosoft's service has no record matching this device — check the hash was uploaded and a profile assigned
809Error: assigned profile no longer existsThe profile was deleted without properly unassigning it first
815Error: no profile assignedNo setup profile is assigned to this device, and there's no company-wide default either
908Error: serial number or product key mismatchThe record Autopilot has on file doesn't match the physical hardware — this device needs to be re-added

Event 908 is the clearest signal for the exact problem this article covers: Microsoft's own description says plainly that the serial number or product key on record doesn't match the physical machine, and it's blocking setup. Event 807 is the second one worth watching for, and 171 paired with 172 usually point specifically at a TPM (security chip) problem.

Event Viewer showing the ModernDeployment-Diagnostics-Provider Autopilot event log channel
The real Autopilot event log channel, showing a healthy run: events 101, 103, 153, and 170, all Information level. Computer name redacted.

Run the companion script

The companion script for this article pulls all of the above into one read-only report. By default, it hides the hash itself and masks every identifying value, because Microsoft is explicit that the hash and related identifiers count as sensitive information. You can opt in to see the real values with -ShowHash and -ShowIdentifiers when you genuinely need them.

Windows-Autopilot-Scripts\autopilot-hardware-hash-4k-composition-decoded\Get-AutopilotHardwareHashReport.ps1

The script also has an -OutputHtml option that renders the same read-only data as a self-contained, styled HTML report instead of a terminal dump — useful if you want to attach it to a ticket or share it with a colleague who doesn't live in PowerShell:

PowerShell — generating a shareable HTML report
.\Get-AutopilotHardwareHashReport.ps1 -OutputHtml .\report.html HTML report written to: C:\HWID\report.html # Same masking rules as the console output - pass -ShowHash / -ShowIdentifiers # if you need the real values. Only written on a successful, complete run.

Here's a live example of that report (with masked, illustrative data) rendered directly below:

A real report generated by the script's -OutputHtml option — embedded live above, not a screenshot.

The fix: remove, recapture, re-add, reset

Microsoft's recommended process for a motherboard replacement has six steps, and the order genuinely matters — doing them out of order can leave you with a broken or unrecoverable device record.

Context: Microsoft's official position is that a motherboard swap is outside what Autopilot supports as an "in-place" repair. Any repair that changes the device's identifying hardware has to go through this full remove-and-re-add process, followed by a normal first-run setup. It isn't a shortcut — it's the supported path.

Step 1: delete the device from Intune

  1. Sign in to the Microsoft Intune admin center.
  2. Select Devices in the left menu.
  3. Under By platform, select Windows.
  4. Find the device by its name and select it.
  5. Note down the serial number shown — you'll need it in the next step.
  6. Select Delete in the toolbar, then confirm with Yes.

Step 2: remove it from Autopilot

intune.microsoft.com›Devices › Windows›Device onboarding › Enrollment›Windows Autopilot › Devices
  1. Go to Devices, then By platform, then Windows.
  2. Under Device onboarding, select Enrollment.
  3. Under Windows Autopilot, select Devices.
  4. Find the device using the serial number from step 1.
  5. Select the checkbox next to it.
  6. Select the "..." menu at the end of the row. If Unassign user is available, use it and confirm. If it's greyed out, that's fine — move on.
  7. Select Delete in the toolbar, then confirm with Yes.
  8. Select Sync to speed things up, then keep hitting Refresh every few minutes until the device disappears from the list.
Watch out: Don't manually delete the device's object from Microsoft Entra ID (the identity/directory service behind Intune). Autopilot's process depends on that object existing, and deleting it can cause setup failures. For devices joined directly to Entra ID, no extra cleanup is needed beyond the steps above. For hybrid-joined devices (joined to both an on-premises Active Directory and Entra ID), you also need to delete the matching computer object from your on-premises Active Directory so it doesn't get resynced.

Step 3: replace the hardware and confirm the firmware is correct

This is the step most repair processes skip, and it's the one that actually determines whether the fix works. Before the device leaves the repair centre, make sure the post-repair firmware correctly reports every field Microsoft lists as required: the disk serial number, the system serial number, manufacturer name, model name, the unique firmware ID, the TPM's identity key, MAC address, product key, and OS type.

Microsoft is upfront that quality here varies a lot between repair vendors. Some replacement motherboards come with a product key already programmed in; some don't. Some repair centres have the right tools to write this firmware data correctly; some don't. If the repair centre doesn't have a tool to write the correct device information onto the new motherboard, Autopilot simply won't recognize the repaired device — even after you capture and upload a brand new hash.

Gotcha: Make firmware correctness a written requirement in your repair contract, and specifically ask that the replacement product key gets programmed into the BIOS before the new hash is captured. Skipping this — sending a board out with no replacement key injected — goes against Microsoft's own guidance and will break the Autopilot experience for that device.

Step 4: capture a fresh hash

The device needs to be fully booted into Windows (or in audit mode) to capture a new hash. If the repair technician doesn't have the user's sign-in details, they'll need to reimage the device first just to get access. From there, either Microsoft's official OA3 tool or this PowerShell script will work:

PowerShell terminal output of Get-WindowsAutopilotInfo.ps1 capturing a new hardware hash
A real hash capture in progress — the script installs, runs, and reports "Gathered details for device with serial number." Serial number redacted.
PowerShell — capturing the new hash after repair (run elevated)
md c:\HWID Set-Location c:\HWID Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force Install-Script -Name Get-WindowsAutopilotInfo -Force Get-WindowsAutopilotInfo.ps1 -OutputFile AutopilotHWID.csv Gathered details for device with serial number: AB1234XY Wrote 1 row to AutopilotHWID.csv # Healthy: one row written, matching the repaired device's serial. # Always use -OutputFile - piping the output to a file by hand corrupts it.
Tip: If Get-WindowsAutopilotInfo.ps1 says "command not found" right after installing it, check that C:\Program Files\WindowsPowerShell\Scripts is included in your PATH environment variable. If Install-Script fails completely, confirm the default script repository is registered by running Get-PSRepository, and register it with Register-PSRepository -Default -Verbose if it's missing.

Step 5: re-add the device using the new hash

intune.microsoft.com›Windows Autopilot › Devices›Import
  1. In the Intune admin center, go to Devices, then Device onboarding, then Enrollment, then Windows Autopilot, then Devices.
  2. Select Import in the toolbar.
  3. Browse to the CSV file containing the new hash and select Import. This can take several minutes.
  4. Select Sync, then keep hitting Refresh until the device shows up.

The required CSV format is fixed and must match exactly:

Device Serial Number,Windows Product ID,Hardware Hash,Group Tag,Assigned User
Gotcha: When re-adding a repaired device, upload only the new hash — leave the product key and the serial number/manufacturer/model columns blank. Microsoft explains that including old values here won't help, because as far as the service is concerned, this hash was never submitted before for what's now effectively a brand-new device identity. Including those old values causes the import to fail with a ZtdDeviceNotFound error.

Step 6: reset the device back to a fresh, unconfigured state

This step is required, not optional. Capturing the hash meant the device had to be fully booted into Windows, but Microsoft states that a device isn't actually considered "deployed" through Autopilot until it goes through the first-run setup screen again. On Windows 11, the path is Settings › System › Recovery › Reset PC, choosing Remove everything. A repair centre without the user's login can use Windows' imaging tools instead to achieve the same result.

Context: There's no Group Policy setting anywhere for any of this. Autopilot registration lives entirely in Microsoft's cloud, so your only interfaces are the Intune admin center, the Microsoft 365 admin center, Microsoft Partner Center, or the Graph API directly. On the device side, the hash is only ever exposed as read-only. Don't go looking for a Group Policy template — it doesn't exist.

Proof it worked: a clean status and a quiet event log

There are three independent ways to confirm the fix actually worked, and you should check all three rather than trusting just one screen.

First, the Autopilot device record should now show Assigned as its profile status, instead of Fix pending or Attention required:

Windows Autopilot devices list showing multiple devices with Profile status Assigned
The healthy end state — real devices showing "Assigned" as their profile status. Serial numbers and purchase orders redacted.

Second, the event log should stop producing identity errors. Events 908 and 807 should no longer appear. Instead, you should see event 153 reporting the state change to "profile available," along with event 161 confirming the profile downloaded successfully.

Third, run the companion script again and compare its output to what you found earlier. The block below is from a real run on the test device used to write this article — every identifying value has been replaced with an obvious placeholder before publishing, on top of the masking the script already applies by default. The structural numbers (the 4,000-character length, 1,714 real payload characters, and the event counts) are genuine measurements, not made up for illustration.

PowerShell — Get-AutopilotHardwareHashReport.ps1 (run elevated)
Autopilot Hardware Hash Report (read-only) Generated : 2026-08-21 21:49:32 Host : PowerShell 5.1.26100.9168 Hash : withheld (pass -ShowHash to display it) Identifiers : masked (pass -ShowIdentifiers to display them) ========================================================================== 1. The hardware hash (DevDetail CSP Ext/DeviceHardwareData) ========================================================================== Hash present : Yes Length (Base64 chars) : 4000 Length modulo 4 : 0 Decodes as Base64 : Yes Non-filler chars : 1714 Trailing filler (A) : 2286 Capture fingerprint : a1b2c3d4e5f60718 Note on the fingerprint: it identifies THIS CAPTURE, not this device. ========================================================================== 2. Attributes Microsoft documents as feeding Autopilot matching ========================================================================== SMBIOS system identity SmbiosSystemManufacturer : CO****SO (masked) SmbiosSystemProductName : XX******01 (masked) SmbiosSystemSerialNumber : AB****YZ (masked) SmbiosUuid : AA********************************ZZ (masked) SmbiosSystemFamily : Co************* 1 (masked) Baseboard serial number : CB*******XY (masked) Disk serial numbers (the system disk carries more weight than the others) Disk 0 [SYSTEM] : DD****************01 (masked) Permanent MAC addresses of built-in physical adapters Wi-Fi : AA********01 (masked) Ethernet : AA********02 (masked) TPM state TPM present : Yes Spec version : 2.0, 0, 1.59 Enabled : True Activated : True ========================================================================== 4. Autopilot event log channel ========================================================================== Examined the 24 most recent event(s). Event ID summary Event 101 x1 Event 103 x13 Event 153 x5 No identity or registration events in the window examined. ========================================================================== Report complete ========================================================================== Nothing was modified. Every operation in this script was a read. # Healthy: sections 1 and 2 populated, and NO 908/807/171/172 in section 4.

Notice the last line of section 4: no events 908, 807, 171, or 172. That's what a healthy, working device looks like. Also notice the script confirms the hash is present and valid without ever printing the actual value — which is exactly the behavior you want when a ticket attachment might end up sitting in a shared mailbox somewhere.

One more check worth adding to your routine: run the script twice in a row. The "capture fingerprint" will be different both times on the exact same, untouched hardware, because the hash embeds its own creation time. If you ever find a process at your organization that treats this hash as a fixed, unchanging device ID, that single test is enough to prove it's built on a wrong assumption.

Community deep-dives worth reading

AuthorArticleWhy it's useful
Rudy OomsHardware Change | Autopilot | Fix PendingTraces exactly how a device detects a hardware change and shows the "Fix pending" status, and notes that Microsoft later withdrew an automatic remediation feature — worth treating as a community observation rather than official documentation.
Rudy OomsDigging into the HardwareHash and the OfflineDeviceIDDigs into a related, TPM-based device identifier that shows up alongside the hash. Good for building intuition, but explicitly undocumented by Microsoft.
Mattias Melkersen, Rudy Ooms and Ben WhitmoreOnboarding modern with Autopilot: Magic trick revealedWalks through the entire setup process once registration succeeds — useful for telling apart identity problems (covered in this article) from later setup problems.

References

PowerShell Scripts — Hardware Hash Report

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

● Get-AutopilotHardwareHashReport.ps1 — checks the hash and the attributes Autopilot uses for matching
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
Windows Autopilot Enrollment Failures: A Structured…
A step-by-step guide for troubleshooting Windows Autopilot enrollment failures — covering…
Autopilot
A browser test is not a network test: how proxies and TLS…
The device has internet, the portal says the profile is assigned, and OOBE still fails.…
Autopilot
Hybrid Autopilot Needs a Domain Controller in OOBE, and 802.1X,…
Microsoft documents that a hybrid Autopilot device must be on the internal network with…