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

The Autopilot 4K Hardware Hash Is Not a Serial Number: What Is Actually Inside It, and What Breaks the Match

IA
Imran Awan
21 August 2026

Almost every Autopilot runbook contains the same instruction: run Get-WindowsAutopilotInfo, save the CSV, upload it, forget about it. That works right up until a device comes back from a repair centre and quietly refuses to behave. The technician swapped a mainboard, the user powered the laptop on, and instead of your branded sign-in page they got the plain Windows out-of-box experience (OOBE). The Autopilot record still sits in Intune showing the right serial number, so nothing looks broken. But the device is orphaned.

This happens because most of us carry a wrong mental model of the 4K hardware hash. We treat it as a serial number with extra characters. It is not. It is a composite of hardware and firmware identifiers, it is regenerated fresh every single time you read it, and the Autopilot service matches it approximately rather than exactly. Once you understand that, the repair scenarios stop being mysterious and become predictable.

The short version

The Autopilot 4K hardware hash is a composite of firmware and hardware identifiers, not a serial number. Microsoft documents which attributes feed it, but explicitly states the blob is not parseable, so nobody should publish a field-by-field layout. The hash is regenerated on every read and the service matches it with tolerance, which is why a new disk still matches but a mainboard or Trusted Platform Module (TPM) swap does not. Re-imaging alone does not invalidate a registration, contrary to widespread belief, so stop deregistering devices you are only rebuilding.

The problem: a repaired device that Autopilot no longer recognises

The failure mode is consistent and it is easy to misread. A device goes out for a hardware repair. It comes back, boots, connects to the network, and runs a completely generic OOBE. No tenant branding, no assigned user, no enrollment. Meanwhile the Autopilot device list in Intune still shows the device by serial number, which is exactly what makes engineers assume the registration is fine.

Sometimes you get a clearer signal. The profile status column changes to Fix pending or Attention required. Microsoft documents that both of these messages indicate a hardware change occurred on the device. Selecting the Fix pending link shows this exact text:

"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 is reassuring and often wrong in practice. Microsoft's own guidance says that if the status stays on Fix pending for an extended period, or flips to Attention required, you must manually deregister and reregister the device. Waiting does not resolve it.

Gotcha: The Intune Autopilot device list shows the serial number recorded at registration time, not the serial number currently in the device firmware. A row that looks correct proves nothing about whether the service can still match the physical hardware. This single display detail is responsible for an enormous amount of wasted troubleshooting.

There is a second, nastier variant. Microsoft documents that the Autopilot profile is not applied when a hardware change occurs and the device is re-imaged to a Windows version older than Windows 11 version 21H2 with KB5017383, or older than Windows 10 version 22H2. Microsoft states this behaviour is expected. If your repair partner re-images to a stale golden image, you can hit this even when the hardware change itself was survivable.

Why it happens: the hash is a firmware fingerprint, matched with tolerance

To predict which repairs break Autopilot, you need three facts about the hash. All three are documented, and all three contradict the common mental model.

Fact one: it is a composite of many identifiers

Microsoft's registration overview states that the hardware hash contains details about the device such as the manufacturer, the model, the device serial number, the hard drive serial number, details about when the identifier was generated, and "many other attributes that can be used to uniquely identify the device."

The Autopilot FAQ is more specific about the minimum. Every hardware hash submitted by an original equipment manufacturer (OEM) must contain the SMBIOS universally unique identifier (UUID), the media access control (MAC) address, and a unique disk serial number. The FAQ explains why plainly: since there is no single unique identifier for Windows devices, these fields together are the best available logic for identifying one.

The same FAQ lists the SMBIOS fields that must hold unique values for the OEM Activation 3.0 (OA3) tool to produce a usable hash. That list is the closest thing to a documented ingredient list that exists:

AttributeWhat it identifiesSurvives a board swap?
SmbiosSystemManufacturerOEM name from SMBIOS Type 1Only if the repair centre rewrites it
SmbiosSystemProductNameModel name from SMBIOS Type 1Only if rewritten
SmbiosSystemSerialNumberChassis serial numberOnly if rewritten
SmbiosSkuNumberOEM stock keeping unitOnly if rewritten
SmbiosSystemFamilyProduct family stringOnly if rewritten
SmbiosUuidFirmware UUID, which must be uniqueNo, this is board-resident
MacAddressPermanent address of the built-in network interfaceNo, if the NIC sits on the board
DiskSerialNumberSerial of the system diskYes, if the disk is reused
ProductKeyIDDigital product key injected in firmwareNo, a replacement key is injected
TPM and EkPubTPM endorsement key, public halfNo, and it cannot be copied

That last row is the one that decides most repair outcomes. Microsoft's motherboard replacement guidance notes that rewriting old device information into a new board "wouldn't include the TPM 2.0 endorsement key, as the associated private key is locked to the TPM device." A new TPM means a new endorsement key, and there is no way to migrate it. That is why a TPM or mainboard swap is definitionally a new device.

Context: Microsoft documents how the OA3 tool collects two of these values. The disk serial number comes from IOCTL_STORAGE_QUERY_PROPERTY using StorageDeviceProperty with PropertyStandardQuery. The network MAC address comes from IOCTL_NDIS_QUERY_GLOBAL_STATS using OID_802_3_PERMANENT_ADDRESS. Note the word permanent. Autopilot reads the burned-in hardware address, so changing a MAC in software does not affect the hash.

Multi-adapter and multi-disk machines behave in a documented way too. Microsoft states that all available MAC and disk values are used, that the serial number of the system disk is more important than other disks, that removable network interfaces should not be used when detected as removable, and that wired versus wireless does not matter because both are used.

Fact two: the blob is deliberately not parseable

You will find blog posts claiming a byte-level field map of the hash. Treat those with suspicion. The DevDetail configuration service provider (CSP) documentation for the node that exposes the hash on a live device carries an unambiguous note: the node "contains 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 does not publish a field-by-field layout of the 4K hash, and it does not publish the matching algorithm either. Any tool or article that claims to decode the blob into named fields is reverse-engineered, undocumented, and liable to break without notice. Do not build a compliance or asset process on top of a parsed hash. Read the underlying attributes from their own sources instead, which is exactly what the companion script does.

Fact three: the hash is regenerated every read, and matching is tolerant

This is the fact that reframes everything. Microsoft states that "the hardware hash changes each time it's generated because it includes details about when it was generated." The blob is not a stable device key. It is a timestamped snapshot.

Because of that, the service cannot compare hashes for equality. It has to match approximately. The registration overview describes the tolerance directly. When the Autopilot deployment service attempts to match a device, it accounts for the generation-time change. It also accounts for large changes such as a new hard drive and still matches successfully. But large changes such as a motherboard replacement will not match, so a new hash must be generated and uploaded.

You can observe the volatility yourself in seconds. Reading the same node twice on an untouched machine returns two different strings:

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

On the test device used for this article the blob was consistently 4,000 Base64 characters long, of which roughly 1,714 were payload and the remainder were trailing A filler. The first differing character between consecutive reads sat around index 32, which is consistent with an early timestamp field. Those measurements come from one machine and Microsoft does not document them as fixed values, so do not hard-code them. The reproducible and documented point is simply that the string changes on every read.

Tip: Trailing A characters are filler rather than data. Microsoft explains that each Base64 character is six bits and that A is six zero bits, so deleting or adding trailing As does not change the payload. This is also the root of a classic import bug. At the device level the hash is unpadded Base64, while Autopilot import expects padded Base64. When the payload does not align, the import silently does nothing and a network trace shows a 400 error reading Cannot convert the literal '[DEVICEHASH]' to the expected type 'Edm.Binary'.

The myth: re-imaging does not invalidate a registration

Now the correction that saves the most needless work. A very common belief is that wiping or re-imaging a device breaks its Autopilot registration. Microsoft's documentation says the opposite in three separate places.

The FAQ asks whether you still get the Autopilot experience after wiping the machine and restarting, and answers yes, provided the device is still registered and running a supported Windows version. It asks whether Autopilot works after motherboard replacement or image reinstallation, and answers yes. The repair scenario matrix includes re-imaging a damaged Autopilot device that was never deregistered, and marks it supported, noting the device remains associated with the previous tenant identifier.

The reason is structural. The registration lives in the Autopilot service and the identity lives in firmware and hardware. The operating system on the disk is not part of either. Autopilot profiles are not even resident on the device. Microsoft states they are downloaded during OOBE, applied, and then discarded.

Context: One operating-system-side artefact does matter. Event ID 163 reports that the download is not required because the device is already provisioned, and tells you to clean or reset the device to change that. Microsoft notes that Sysprep /Generalize typically removes a cached Autopilot profile. So a stale cached profile is an image hygiene problem, not a registration problem.

The repair matrix, condensed

Microsoft publishes a tested scenario table. These are the outcomes worth committing to memory:

ChangeAutopilot outcomeAction needed
Memory, power supply, GPU, card reader, sound card, expansion card, microphone, webcam, fan, heat sink, CMOS batteryUnaffectedNone
System disk replaced, everything else retainedStill matchesNone
Re-image or reset with no hardware changeStill registeredNone
One built-in network card replacedProbably still matchesRecapture if it fails
Mainboard replacedNew deviceDeregister and reregister
TPM replacedNew deviceDeregister and reregister
Mainboard replaced, second network interface retainedNot supportedAvoid this configuration
Non-OEM add-in network card usedNot supportedUse the on-board NIC
Mainboard replaced without writing device info to BIOSFails to recogniseRepair centre must write BIOS data

The second-network-interface row deserves a note, because the documented reason is instructive. Microsoft says that scenario breaks the Autopilot experience because the resulting device identifier "won't be stable until after TPM attestation is complete," and that even then registration might give incorrect results because of ambiguity in MAC address resolution. Two candidate MAC addresses from two different hardware generations create a genuinely ambiguous identity.

Watch out: Never scavenge parts from one Autopilot device into another and then keep both registered. Microsoft warns this can leave two active devices with the same identifier and no way to tell them apart. If you must scavenge, deregister the donor device and never register it again. Recovering from a duplicate identifier requires deregistering both devices, collecting hashes from the physical machines rather than trusting OEM-supplied data, and then re-registering.

How to verify: read the blob and the attributes that feed it

Verification has two halves. Confirm the device can produce a valid hash at all, then compare the identifying attributes against what the service has on record.

Read the hash on a live device

The hash is exposed through the DevDetail CSP at ./DevDetail/Ext/DeviceHardwareData, which returns a Base64-encoded string of the device's hardware parameters. Microsoft added this node in Windows 10 version 1703. On a running device you reach it through the WMI-to-CSP bridge. The query below is the one Microsoft's own material uses:

Administrator: Windows PowerShell
PS C:\> 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

PS C:\> # The length is stable. The contents are not.
Gotcha: This query needs an elevated session. Run it unelevated and you get an empty or failed result, which looks identical to a device that genuinely has no hash. Those two states demand opposite responses, so never accept a blank answer without first confirming you were running as administrator.

If the hash really is empty, the documented cause is missing firmware data. Microsoft's InvalidZtdHardwareHash guidance states that both the manufacturer and serial number information must be included, or the device cannot be registered. It gives the exact check:

PowerShell — checking the minimum firmware fields (run elevated)
PS C:\> Get-CimInstance Win32_BaseBoard | Select-Object Manufacturer, SerialNumber Manufacturer SerialNumber ------------ ------------ CONTOSO (blank) # Broken: a blank SerialNumber means this device cannot be registered. # Healthy looks like: CONTOSO AB1234XY # Microsoft requires BOTH manufacturer and serial number to be present.

Other ways to collect the hash

Microsoft documents four collection methods, and it is worth knowing all of them because repair centres rarely have your tooling. You can use Configuration Manager, which collects hashes for existing Windows devices automatically. You can use the Get-WindowsAutopilotInfo script from the PowerShell Gallery. On Windows 11 you can press CTRL + SHIFT + D during OOBE to open the Autopilot diagnostics page and export logs including a CSV with the hash. Or you can export from the desktop:

SettingsAccountsAccess work or schoolExport your management log filesExport

Logs land in C:\Users\Public\Documents\MDMDiagnostics. You can also reach that pane directly by running ms-settings:workplace.

Tip: Always use the -OutputFile parameter with Get-WindowsAutopilotInfo. Microsoft explicitly warns against piping the command output to a file manually, because that breaks the formatting. Related CSV rules that bite people: no quotation marks, no extra columns, ANSI text only rather than Unicode, case-sensitive headers, and no Microsoft Excel. Editing and saving the CSV in Excel does not produce a file Intune can import.

Check the client-side registration state

The client caches what the service told it. Microsoft documents these values under a single parent key:

HKLM\SOFTWARE\Microsoft\Provisioning\Diagnostics\Autopilot
ValueMeaningWhat to look for
IsAutopilotDisabledSet to 1 when the device is not registered with Autopilot1 on a device you believe is registered means the match failed, or the profile could not be downloaded
CloudAssignedTenantDomainTenant the device is registered withBlank means the device is not registered with Autopilot
CloudAssignedTenantIdGUID of that tenantBlank means not registered
AadTenantIdGUID of the tenant the user signed intoA mismatch against the assigned tenant produces a user-facing error
TenantMatchedSet to 1 when the user tenant matches the registered tenant0 means the user is shown an error and forced to start over
CloudAssignedOobeConfigBitmap of configured OOBE settingsDocumented bits: SkipCortanaOptIn 1, OobeUserNotLocalAdmin 2, SkipExpressSettings 4, SkipOemRegistration 8, SkipEula 16
Registry Editor
▼ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Provisioning
  ▼ Diagnostics
    ▼ Autopilot
        IsAutopilotDisabled      REG_DWORD    0x00000001 (1)
        CloudAssignedTenantDomain REG_SZ       (blank)
        CloudAssignedTenantId    REG_SZ       (blank)
        TenantMatched           REG_DWORD    0x00000000 (0)
Illustrative. This is the signature of an orphaned device: registered in your records, unrecognised by the service.

Read the event log

Autopilot logs to a dedicated channel. In Event Viewer, open Applications and Services Logs then Microsoft then Windows then ModernDeployment-Diagnostics-Provider then Autopilot. The full channel path for Get-WinEvent is:

Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Autopilot
Event IDType and messageWhat it tells you
100Warning: Autopilot policy not foundUsually transient while waiting for a profile download
101Info: AutopilotGetPolicyDwordByName succeededNumeric OOBE settings being processed
103Info: AutopilotGetPolicyStringByName succeededString OOBE settings such as the tenant name
109Info: AutopilotGetOobeSettingsOverride succeededState-related OOBE settings being processed
111Info: AutopilotRetrieveSettings succeededProfile settings controlling OOBE were retrieved
153Info: state changed from one state to anotherProfileState_Unknown to ProfileState_Available means a profile downloaded and the device is ready
160Info: AutopilotRetrieveSettings beginning acquisitionProfile download starting
161Info: retrieve settings succeededProfile downloaded successfully
163Info: download not required, already provisionedA profile is cached locally. Clean or reset the device to change it
164Info: internet available to attempt policy downloadConnectivity confirmed
171Error: failed to set TPM identity confirmedTPM attestation problem. Central to post-repair failures
172Error: failed to set Autopilot profile as availableTypically follows event 171
807Error: ZtdDeviceIsNotRegisteredThe service has no registration matching this device. Verify the hash was uploaded and a profile assigned
809Error: ZtdDeviceHasNoAssignedProfile, assigned profile does not existThe assigned profile was deleted without cleanup
815Error: ZtdDeviceHasNoAssignedProfile, none assigned and no tenant defaultNo profile is assigned to the device
908Error: SerialNumberMismatch or ProductKeyIdMismatchThe identity recorded in Autopilot does not match the physical hardware. Reregister the device

Event 908 is the definitive signal for this article's failure mode. Microsoft's description is explicit: there is a mismatch between the serial number or product key recorded in Autopilot and the physical hardware, and it is preventing enrollment. Event 807 is the second one to watch, and 171 together with 172 point at the TPM.

Event Viewer — ModernDeployment-Diagnostics-Provider › Autopilot
LevelDate and TimeEvent IDTask Category
Information14:02:11164Internet available
Information14:02:12160Beginning acquisition
Warning14:02:19100Policy not found
Error14:02:24908SerialNumberMismatch
Error14:02:24807ZtdDeviceIsNotRegistered
Illustrative. Events 908 and 807 together confirm the hardware no longer matches the registration.

Run the companion script

The companion script pulls all of the above into one read-only report. It withholds the hash and masks every identifier by default, because Microsoft states that 4K hardware hashes contain sensitive information that only device owners should maintain. Opt in with -ShowHash and -ShowIdentifiers when you actually need the values.

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

The fix: deregister, recapture, reregister, reset

Microsoft's recommended sequence for a mainboard replacement has six steps, and the order matters. Skipping steps or removing records out of order can produce orphaned or unrecoverable device records.

Context: Microsoft's stated position is that motherboard replacement is out of scope for Autopilot. Any repaired or serviced device that alters the ability to identify the device must go through the normal OOBE process. The sequence below is how you bring such a device back into Autopilot. It is not a supported in-place repair.

Step 1: delete the device from Intune

  1. Sign in to the Microsoft Intune admin center.
  2. Select Devices in the left pane.
  3. Under By platform, select Windows.
  4. Find the device under Device name and select it.
  5. Note the serial number shown under Serial number. You need it in step 2.
  6. Select Delete in the toolbar, then Yes to confirm.

Step 2: deregister from Autopilot

intune.microsoft.comDevices › WindowsDevice onboarding › EnrollmentWindows 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 by the serial number from step 1.
  5. Select the checkbox next to it.
  6. Select the extended menu icon at the far right of the row. If Unassign user is available, select it and confirm with OK. If it is greyed out, move on.
  7. Select Delete in the toolbar, then Yes.
  8. Select Sync to speed up the removal, then Refresh every few minutes until the device disappears.
Watch out: Do not manually delete the device object from Microsoft Entra ID. Microsoft documents that the Autopilot deployment process relies on the Entra device object, and that deleting it can cause enrollment failures. For Entra joined devices no extra steps are needed after deregistration. For Entra hybrid joined devices, delete the computer object from on-premises Active Directory Domain Services so it is not resynced, and then stop. Behaviour also differs by enrollment state. For devices not currently enrolled in mobile device management (MDM), removing the Autopilot registration can also remove the Entra object. For devices that are or were MDM enrolled, it does not.

Step 3: replace the hardware and confirm the firmware

This is the step organisations skip, and it is the one that determines success. Before the device leaves the repair centre, confirm the post-repair firmware can populate every field Microsoft lists as the minimum: DiskSerialNumber, SmbiosSystemSerialNumber, SmbiosSystemManufacturer, SmbiosSystemProductName, SmbiosUuid, TPM EKPub, MacAddress, ProductKeyID and OSType.

Microsoft is blunt that quality varies here. Repair facilities sometimes receive spare boards with replacement digital product keys pre-injected and sometimes do not. They sometimes receive working BIOS tools and sometimes do not. The documented failure case is explicit. If the repair facility lacks a BIOS tool to write device information after the board swap, Autopilot fails to recognise the repaired device even after a new hash is captured and uploaded.

Gotcha: Make firmware rewrite a written line item in your repair contract, and ask for the replacement digital product key to be injected before the new hash is captured. Microsoft states that a repaired device should have the product key pre-injected in the BIOS before capturing the new 4K hash, and that a scenario with no replacement key injected violates Microsoft policy and breaks the Autopilot experience.

Step 4: capture a new 4K hash

The device must be in the full operating system or in audit mode to capture the hash. Repair technicians without the user's credentials have to re-image the device to gain access. Then either the OA3 tool from the Windows Assessment and Deployment Kit or the PowerShell script will work:

PowerShell — capturing the new hash after repair (run elevated)
PS C:\> md c:\HWID PS C:\> Set-Location c:\HWID PS C:\> Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted -Force PS C:\> Install-Script -Name Get-WindowsAutopilotInfo -Force PS C:\> Get-WindowsAutopilotInfo.ps1 -OutputFile AutopilotHWID.csv Gathered details for device with serial number: AB1234XY Wrote 1 row to AutopilotHWID.csv # Healthy: one row written, serial matching the repaired chassis. # Always use -OutputFile. Piping to a file by hand corrupts the format.
Tip: If Get-WindowsAutopilotInfo.ps1 is reported as not found after installation, confirm that C:\Program Files\WindowsPowerShell\Scripts is in the PATH variable. If Install-Script fails outright, check the default repository is registered with Get-PSRepository, and register it with Register-PSRepository -Default -Verbose if it is missing.

Step 5: reregister with the new hash

intune.microsoft.comWindows Autopilot › DevicesImport
  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 Refresh until the device appears.

The CSV header and row format is fixed:

Device Serial Number,Windows Product ID,Hardware Hash,Group Tag,Assigned User
Gotcha: When reregistering a repaired device, upload only the 4K hash. Do not upload the product key identifier or the tuple of serial number, OEM name and model. Microsoft explains that the service would find no match, because no 4K hash was previously submitted for what is effectively a new device, and the upload fails with ZtdDeviceNotFound. The product key and tuple columns can simply be left blank.

Step 6: reset the device back to a pre-OOBE state

This step is mandatory, not cosmetic. Capturing the hash required the device to be in the full operating system, and Microsoft states that a device is not actually deployed to Autopilot until it goes through OOBE. On Windows 11 the path is Settings then System then Recovery then Reset PC, choosing Remove everything. A repair centre without credentials will use Deployment Image Servicing and Management instead.

Context: There is no Group Policy setting for any of this. Autopilot registration is a cloud service record, so the only interfaces are the Intune admin center, the Microsoft 365 admin center, Microsoft Partner Center, and the Graph API. The device-side hash is exposed read-only through the DevDetail CSP. Do not go looking for an administrative template, because none exists.

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

You have three independent confirmations available, and you should check all three rather than trusting the portal alone.

First, the Autopilot device record shows the profile status as Assigned rather than Fix pending or Attention required:

Microsoft Intune admin center › Windows Autopilot devices
CONTOSO-LAPTOP (repaired)
Serial number
AB1234XY
Profile status
Assigned
Enrollment state
enrolled
Associated Entra device
{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}
Group tag
CORP-STANDARD
Date registered
after repair, new 4K hash
Illustrative. Placeholder identifiers only.

Second, the event log stops producing identity errors. Events 908 and 807 should be absent. You should instead see 153 reporting the state change to ProfileState_Available, plus 161 confirming the profile downloaded.

Third, run the companion script and compare its output against what the service holds. The block below comes from a real run on the machine used to write this article. Every identifier value has been replaced with an obvious placeholder for publication, on top of the masking the script already applies. The structural figures are genuine: the 4,000 character length, the 1,714 payload characters, the 2,286 filler characters, and the event counts are all as measured.

PowerShell — Get-AutopilotHardwareHashReport.ps1 (run elevated)
Autopilot 4K 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 4K 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.

Note the last line of section 4: no events 908, 807, 171 or 172. That is what a healthy device looks like. Note also that the script reports the hash as present and Base64-valid without ever printing it, which is the behaviour you want when a ticket attachment might end up in a shared mailbox.

One final confirmation is worth building into your process. Run the script twice in a row. The capture fingerprint will differ between the two runs on identical hardware, because the hash embeds its own generation time. If you ever meet a workflow that treats the hash as a stable device key, that single observation is enough to reject it.

Community deep-dives worth reading

AuthorArticleWhy it is useful
Rudy OomsHardware Change | Autopilot | Fix PendingTraces the client-side hardware change detection and the Fix pending status, and reports that Microsoft later withdrew the automatic hardware hash remediation feature. Treat that withdrawal as community observation rather than documented behaviour.
Rudy OomsDigging into the HardwareHash and the OfflineDeviceIDReverse-engineers the TPM-derived device identifier that appears alongside the hash. Useful for intuition, but explicitly undocumented.
Mattias Melkersen, Rudy Ooms and Ben WhitmoreOnboarding modern with Autopilot: Magic trick revealedWalks the whole provisioning sequence after registration succeeds, which helps separate identity failures from later enrollment failures.

References

PowerShell Scripts — Hardware Hash Report

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-AutopilotHardwareHashReport.ps1 — hardware-hash presence and the attributes feeding Autopilot 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…