HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Autopilot AutopilotZTDIDMicrosoft Entra IDMicrosoft GraphDynamic GroupsphysicalIdsIntuneDevice Registration

The ZTDID: The One Attribute That Proves a Device Is Really Autopilot-Registered

IA
Imran Awan
21 August 2026

Every device that Windows Autopilot knows about carries a marker. It is not the serial number. It is not the group tag. It is a value called the ZTDID, and it lives on an object in Microsoft Entra ID that you never created by hand. When that marker is present, your dynamic device groups fill up and your Autopilot deployment profiles land where you expect. When it is absent, the device still enrols. It still appears in Intune. It still reports as compliant. And it quietly behaves like a machine somebody built manually, because as far as group membership is concerned, that is exactly what it is.

The short version

ZTDID is short for Zero Touch Device ID. It sits inside the physicalIds collection on the Microsoft Entra ID device object that Autopilot registration creates, and every dynamic group rule Microsoft publishes for "all Autopilot devices" tests for that marker. A device without it never joins the group, so it never gets a deployment profile, and nothing in the Intune portal explains why. Microsoft does not document any ZTDID field on the device itself, so the only reliable way to audit a fleet is Microsoft Graph.

The problem: a device that enrolled cleanly and still behaves hand-built

The ticket usually reads like a contradiction. A laptop was registered with Autopilot months ago. It shows up in the Autopilot devices list with the right serial number. It shows up in Intune as an enrolled, compliant, Microsoft Entra joined Windows device. But the dynamic group that is supposed to contain every Autopilot device does not contain it. No Autopilot deployment profile is assigned. Any configuration you target at that group skips the machine entirely.

Here is what that looks like in the portal. The device record exists and looks entirely normal.

Microsoft Intune admin center — Windows Autopilot devices
CONTOSO-W11-0417
Serial number5CD9xxxxxx
Group tagStandard-EU
Enrollment stateenrolled
Profile statusNot assigned
Associated Entra device IDaaaaaaaa-0b0b-1c1c-2d2d-333333333333

Most engineers chase this in the wrong direction. They check the group tag. They re-save the deployment profile. They force a sync. They rebuild the dynamic group rule from memory. None of that helps, because the missing piece is not in Intune at all. It is a single string on the Entra ID device object, and the Intune portal never shows it to you.

Context: ZTD is Microsoft's internal shorthand for Zero Touch Deployment. You can see it surfacing in the Autopilot event log, where the error names are literally ZtdDeviceIsNotRegistered and ZtdDeviceHasNoAssignedProfile. The same three letters open the ZTDID. Once you know the prefix, the naming across the whole feature area starts making sense.

Why it happens: the marker lives on an object you never created

Autopilot registration does two things at once. The obvious one is that a hardware hash gets uploaded and associated with your tenant ID. The less obvious one is that Microsoft Entra ID gets a brand new device object, created before anybody has ever signed in on the hardware.

Microsoft is explicit about this. The registration overview states that when an Autopilot device is registered, it automatically creates a Microsoft Entra object, and that the Autopilot deployment process needs that object to identify the device before the user signs in. The troubleshooting FAQ puts it more bluntly: that object acts as Autopilot's anchor in Microsoft Entra ID for group membership and targeting, including the profile.

That anchor object is where the ZTDID lives. In Microsoft Graph, the property is physicalIds on the device resource. It is a string collection, and Microsoft's own reference labels it "For internal use only." In Entra ID dynamic membership rules, the same data is addressed as devicePhysicalIds. Two names, one collection.

The three bracketed keys Microsoft documents

Entries in that collection are prefixed with a key in square brackets. Microsoft documents exactly three of them for Autopilot purposes, and each one answers a different question.

Bracketed keyWhat it identifiesWhere the value comes from
[ZTDId]That the device is registered with the Autopilot deployment service at all. This is the registration marker.Written when the Entra device object is created during Autopilot registration.
[OrderID]The group tag. Microsoft states that Intune's group tag field maps to the OrderID attribute on Entra devices.The group tag you set on the Autopilot device record.
[PurchaseOrderId]The purchase order identifier, normally supplied by the OEM, reseller, or distributor.The purchaseOrderIdentifier on the Autopilot device identity.

The distinction matters enormously. [OrderID] is a label you chose and can change. [ZTDId] is not a label. It is proof of registration. A device can have a perfectly correct group tag on its Autopilot record and still have no ZTDID on its Entra object, and in that state no group rule can ever find it.

Watch out: Do not delete the Entra ID device object to "clean up" a device you are troubleshooting. Microsoft's guidance is unambiguous. The FAQ warns that a Microsoft Entra device is created upon import, that it is important this object is not deleted, and that deleting it might lead to Microsoft Entra join errors. The deregistration guidance repeats it: avoid manually deleting the device from Microsoft Entra ID. Delete that object and you delete the ZTDID with it, along with the anchor Autopilot uses to recognise the hardware.

Why the marker goes missing

There are a handful of documented ways a device ends up enrolled without the marker. Understanding which one applies tells you how to fix it.

Gotcha: Microsoft's own documentation spells the marker two different ways. The Autopilot device groups article writes "[ZTDid]", and the Entra dynamic membership reference writes "[ZTDId]". Both work, because the dynamic rules engine documentation states that regex and string operations are not case sensitive. The part that is case sensitive is the property name, and the same two articles disagree there too, using devicePhysicalIDs and devicePhysicalIds. Do not retype these rules from memory. Paste them verbatim and let the portal validate the syntax before you save.

How to verify: reading physicalIds, and what the device can and cannot tell you

There are three places worth looking, and they are useful in a specific order. Start in the cloud, because that is where the marker actually is.

Step 1: read physicalIds from Microsoft Graph

The Entra portal does not expose physicalIds on a device blade. Graph is the documented read path. The least privileged permission for listing devices is Device.Read.All, for both delegated and application access.

PowerShell — Microsoft Graph PowerShell SDK
Connect-MgGraph -Scopes 'Device.Read.All' # Least privilege. Read-only. No write scope is needed to audit the marker. Get-MgDevice -Filter "displayName eq 'CONTOSO-W11-0417'" ` -Property 'id,deviceId,displayName,physicalIds,enrollmentProfileName,trustType' | Select-Object DisplayName, DeviceId, TrustType, EnrollmentProfileName -ExpandProperty PhysicalIds # physicalIds is a string collection. Ask for it explicitly with -Property. # Healthy Autopilot device - the marker is present: # [ZTDId]:aaaaaaaa-0b0b-1c1c-2d2d-333333333333 # [OrderID]:Standard-EU # [PurchaseOrderId]:76222342342 # Device that is enrolled but NOT Autopilot registered: # (empty collection - physicalIds returns nothing at all)

That empty collection is the whole diagnosis. No [ZTDId] entry means no dynamic group membership, which means no profile assignment, which means the device behaves exactly like one somebody imaged by hand.

Tip: Microsoft documents which operators physicalIds supports for $filter: eq, not, ge, le, startsWith, /$count eq 0, and /$count ne 0. No official example shows the collection filter syntax for the ZTDID prefix specifically, so for an audit across a whole tenant it is safer to select physicalIds and filter client-side in PowerShell. You get a result you can reason about instead of a filter expression that might silently match nothing.

Step 2: cross-reference against the Autopilot service record

The marker being absent tells you the Entra object has no registration stamp. It does not tell you whether the Autopilot service has a registration for that hardware. Those are two separate records, and comparing them is how you tell "never registered" apart from "registered but the marker landed somewhere else."

PowerShell — cross-referencing Autopilot registrations with Entra devices
Connect-MgGraph -Scopes 'Device.Read.All','DeviceManagementServiceConfig.Read.All' # DeviceManagementServiceConfig.Read.All is the least privileged scope for Autopilot identities. Invoke-MgGraphRequest -Method GET ` -Uri 'https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeviceIdentities' # Returns windowsAutopilotDeviceIdentity objects. GET only - nothing here changes state. # The link between the two worlds is azureActiveDirectoryDeviceId, # which matches the deviceId on the Entra device object. # Microsoft's reference notes this property is "to be deprecated", so treat it as a # correlation hint and confirm matches by serial number where you can. # Three outcomes worth reporting separately: # Autopilot record + Entra object with [ZTDId] -> healthy # Autopilot record + Entra object, no [ZTDId] -> marker missing, group rules will miss it # No Autopilot record, Entra object enrolled -> never registered, not an Autopilot device

Step 3: ask the device, and know the limits of what it can answer

This is where a lot of published guidance goes wrong, so let me be precise. Microsoft does not document a ZTDID field anywhere on the device. The documented field list for dsregcmd /status covers device state, device details, tenant details, user state, SSO state, and diagnostics. It includes DeviceId, Thumbprint, TpmProtected, DeviceAuthStatus, and a long list of others. It does not include ZTDID, and it does not include physicalIds. If you are looking for the marker on the endpoint, you will not find it there.

What the device can tell you is whether it thinks it is Autopilot registered at all. Autopilot profile settings received from the deployment service are stored under one registry key.

HKLM\SOFTWARE\Microsoft\Provisioning\Diagnostics\Autopilot
ValueWhat it tells youReading it for registration
IsAutopilotDisabledSet to 1 when the device is not registered with Autopilot. Can also mean the profile download failed on network or firewall grounds.1 is your strongest device-side signal that no registration exists.
CloudAssignedTenantIdGUID of the Entra tenant the device registered with. Blank if the device is not registered with Autopilot.Blank alongside IsAutopilotDisabled of 1 confirms the picture.
CloudAssignedTenantDomainThe tenant domain the device registered with, for example contoso.onmicrosoft.com. Blank if not registered.A populated value proves a profile was downloaded successfully.
AadTenantIdGUID of the tenant the signing-in user belongs to. A mismatch against registration produces an error for the user.Compare against CloudAssignedTenantId when a device registered in the wrong tenant.
TenantMatchedSet to 1 when the user's tenant ID matches the tenant the device was registered with. If 0, the user sees an error and must start over.0 points at a cross-tenant registration, not a missing marker.
CloudAssignedOobeConfigA bitmap of which Autopilot OOBE settings were configured. Documented values are SkipCortanaOptIn 1, OobeUserNotLocalAdmin 2, SkipExpressSettings 4, SkipOemRegistration 8, SkipEula 16.A populated bitmap means a real profile was applied.
Registry Editor
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Provisioning\Diagnostics\Autopilot
IsAutopilotDisabledREG_DWORD0x00000001 (1)
CloudAssignedTenantIdREG_SZ(value not set)
CloudAssignedTenantDomainREG_SZ(value not set)
AadTenantIdREG_SZbbbbbbbb-1c1c-2d2d-3e3e-444444444444
TenantMatchedREG_DWORD0x00000000 (0)

That combination is a textbook unregistered device. It has a tenant from the signed-in user, no assigned tenant from Autopilot, and the disable flag set.

Step 4: read the Autopilot event log

Autopilot writes to its own event log channel. If a device ever attempted an Autopilot flow and was told it was not registered, the evidence is here.

Applications and Services Logs › Microsoft › Windows › ModernDeployment-Diagnostics-Provider › Autopilot
Event Viewer
LevelDate and TimeEvent IDTask Category
Information08/21/2026 09:14:02160AutopilotRetrieveSettings beginning acquisition
Information08/21/2026 09:14:03164Internet is available to attempt policy download
Warning08/21/2026 09:14:07100Autopilot policy not found
Error08/21/2026 09:14:08807ZtdDeviceIsNotRegistered
Information08/21/2026 09:14:09163Download not required, device already provisioned

Event 807 is the one that matters here. It is the service telling the device, in plain terms, that it has no Autopilot registration. Here is the full documented catalog for that channel, so you can read the surrounding entries in context.

Event IDTypeWhat Microsoft documents
100WarningAutopilot policy not found. Typically temporary, while the device waits for a profile to download.
101InfoAutopilotGetPolicyDwordByName succeeded. Autopilot retrieving and processing numeric OOBE settings.
103InfoAutopilotGetPolicyStringByName succeeded. Processing OOBE setting strings such as the Entra tenant name.
109InfoAutopilotGetOobeSettingsOverride succeeded. Processing state-related OOBE settings.
111InfoAutopilotRetrieveSettings succeeded. Profile settings controlling OOBE behaviour were retrieved.
153InfoState changed, usually ProfileState_Unknown to ProfileState_Available. A profile was downloaded and the device is ready to deploy.
160InfoAutopilotRetrieveSettings beginning acquisition. Autopilot is preparing to download profile settings.
161InfoRetrieve settings succeeded. The profile downloaded successfully.
163InfoDownload is not required, the device is already provisioned. A profile is present on the device. Sysprep /Generalize typically removes it.
164InfoInternet is available to attempt policy download.
171ErrorFailed to set TPM identity confirmed. Indicates a TPM attestation problem, which self-deploying mode needs.
172ErrorFailed to set Autopilot profile as available. Typically related to event 171.
807ErrorZtdDeviceIsNotRegistered. Validate the hardware hash is uploaded to Intune and the device is assigned a profile.
809ErrorZtdDeviceHasNoAssignedProfile, assigned profile does not exist. The profile was deleted without cleanup.
815ErrorZtdDeviceHasNoAssignedProfile, no profile assigned and no default profile in the tenant.
908ErrorSerialNumberMismatch or ProductKeyIdMismatch. Recorded values do not match the physical hardware. Reregister the device.

The fix: repair the registration, not the rule

Once you know the marker is missing, resist the urge to loosen the dynamic group rule so the device slips in. The rule is not the problem. Work through these three things in order.

1. Confirm the dynamic group rule is Microsoft's rule, verbatim

Do this first, because it is fast, and because a mistyped rule produces the exact same symptom on every device instead of one.

intune.microsoft.comGroupsNew group
  1. In the Microsoft Intune admin center, select Groups, then New group.
  2. For Group type, select Security.
  3. Enter a Group name and Group description.
  4. For Microsoft Entra roles can be assigned to the group, select No.
  5. For Membership type, select Dynamic Device.
  6. Select Owners, then choose the users who should own the group.
  7. Under Dynamic device members, select Add dynamic query, then Add expression.
  8. Switch to the rule syntax text box and paste the rule for all Autopilot devices exactly as Microsoft publishes it: (device.devicePhysicalIDs -any (_ -startsWith "[ZTDid]"))
  9. Select Save, then Create.

If you need to scope by group tag or purchase order instead, these are the two other documented rule strings:

Gotcha: Microsoft states plainly that the rule builder is available only for user-based dynamic membership groups, and that you can create device-based dynamic membership groups only by using the text box. If you are hunting for a graphical expression builder for device rules, there is not one. Microsoft also warns that you should only create these groups using Autopilot device attributes, because attributes that are not Autopilot attributes do not guarantee membership before provisioning, and can cause unexpected configuration during OOBE.

2. Re-register the device so a fresh marker is stamped

If the rule is correct and one device is still missing, the registration itself needs repairing. Microsoft's documented remedy for a device whose Entra object predates its Autopilot registration is to delete all three records and start over.

intune.microsoft.comDevices › Windows › EnrollmentWindows Autopilot devices
  1. Sign in to the Microsoft Intune admin center and select Devices.
  2. Under By platform, select Windows.
  3. Find the device under Device name, open it, and note the Serial number.
  4. Select Delete in the toolbar, then Yes to confirm removing it from Intune.
  5. Under Device onboarding, select Enrollment, then under Windows Autopilot select Devices.
  6. Find the device by the serial number you noted, and select its checkbox.
  7. Open the overflow menu on that row. If Unassign user is available, select it and confirm with OK.
  8. With the device still selected, choose Delete in the toolbar, then Yes.
  9. Select Sync to speed up the deregistration, then Refresh every few minutes until the row disappears.
  10. Re-register the device by importing its hardware hash again, then re-enrol it.
Watch out: Microsoft states that for Microsoft Entra joined devices no additional steps are required after deregistering from Autopilot, and to avoid manually deleting the device from Microsoft Entra ID because that can cause unexpected issues. For Microsoft Entra hybrid joined devices, delete the computer object from on-premises Active Directory Domain Services so it is not resynced, and again do not manually delete from Entra ID. Microsoft also warns that skipping steps or removing records out of order can result in orphaned or unrecoverable devices.

3. For an already-managed fleet, register in bulk and wait the documented window

If your audit turns up a large batch of enrolled devices with no registration at all, the Autopilot profile carries a setting that registers them for you.

intune.microsoft.comDevices › EnrollmentDeployment Profiles
  1. Open the Autopilot deployment profile assigned to the group containing those devices.
  2. Set Convert all targeted devices to Autopilot to Yes.
  3. Save the profile, and allow 48 hours for the registration to be processed.
  4. Re-run your audit and confirm the marker has appeared on the Entra device objects.
Context: Two documented caveats on that setting. First, it does not convert existing hybrid Microsoft Entra devices in the assigned groups into Microsoft Entra devices. It only registers them with the Autopilot service. Second, once a device is registered this way, disabling the setting or removing the profile assignment does not remove it from the Autopilot deployment service. You have to deregister it explicitly.
Tip: There is no Group Policy setting and no CSP or OMA-URI that controls the ZTDID. The marker is written by the Autopilot deployment service onto a cloud directory object, and no client-side policy can create, change, or repair it. Anything you find suggesting a local registry edit to add a ZTDID is inventing a mechanism that does not exist. The registry key under Provisioning\Diagnostics\Autopilot is a diagnostic cache of what the service told the device, not a control surface.

Proof it worked: the audit report goes quiet

The companion script for this post walks every Entra device object, extracts physicalIds, and compares what it finds against the Autopilot service's own registration list. It is read-only. Every Graph call is a GET, and the scopes are Device.Read.All and DeviceManagementServiceConfig.Read.All.

PowerShell — Get-AutopilotZtdidReport.ps1 (illustrative output, not a real tenant)
PS C:\> .\Get-AutopilotZtdidReport.ps1 -OperatingSystem Windows === Autopilot ZTDID registration marker report === Entra device objects examined : 412 Autopilot service registrations : 388 [OK] Entra devices carrying a ZTDID marker : 381 [WARN] Autopilot registrations with no ZTDID marker : 4 [WARN] Entra devices with no marker (not Autopilot) : 31 [WARN] Marker present but no Autopilot registration : 3 # The three WARN buckets are the ones worth a ticket. Each one is a different fault. --- Autopilot registrations whose Entra device lacks the marker --- Serial EntraDisplayName GroupTag EnrollState ------ ---------------- -------- ----------- 5CD9xxxxxx CONTOSO-W11-0417 Standard-EU enrolled 5CD9xxxxxy CONTOSO-W11-0902 Standard-EU enrolled # These enrolled fine and will never match (device.devicePhysicalIDs -any (_ -startsWith "[ZTDid]")) --- Marker present but no matching Autopilot registration --- EntraDisplayName ZtdidPresent AutopilotRecord ---------------- ------------ --------------- CONTOSO-W11-0031 True (none found) # Classic leftover: registration was deleted, the Entra object survived. Documented behaviour # for devices that are or were enrolled in MDM. Report written to: .\AutopilotZtdidReport-20260821-143002.csv # Exit code 0. Read-only run - nothing in the tenant was modified.

A healthy fleet is one where the first counter is high and the three warning counters are explained. You will almost never drive them to zero, and you should not try. Personal devices and Entra registered devices are legitimately not Autopilot devices, and they should legitimately have no marker. What you are hunting is the specific mismatch: a device the Autopilot service believes it has registered, whose Entra object carries no marker. Those are the machines that behave hand-built, and now you have a name for the reason.

References

Microsoft official documentation

Community deep-dives

AuthorArticleWhy it is worth reading
Rudy OomsWilly's White Glove Autopilot WonderlandWalks the pre-provisioning flow and describes the Device Registration Service pre-creating the Entra object and attaching the ZTDID during registration. The clearest community explanation of where the marker comes from.
Mattias Melkersen, Rudy Ooms, Ben Whitmore (MSEndpointMgr)Onboarding modern with Autopilot: Magic trick revealedEnd to end trace of the Autopilot provisioning flow, including the devicePhysicalIDs query used to select Autopilot registered devices.
Rudy OomsAutopilot: The Group Membership WarUseful counterpoint before you conclude a marker is missing. Dynamic group membership processing can lag, so rule out delay before you rule out the ZTDID.
PowerShell Scripts — ZTDID Registration Marker

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-AutopilotZtdidReport.ps1 — audits Entra devices for the ZTDID Autopilot-registration marker
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
The Autopilot Conditional Access deadlock: requiring a compliant…
A brand-new Autopilot device cannot be compliant before it is enrolled, so a Conditional…
Autopilot
Autopilot Device Preparation Needs an Assigned Group, Not a…
Autopilot device preparation rejects the dynamic device groups classic Autopilot taught…
Autopilot
Four ways a device gets into Autopilot, and why they behave…
OEM, reseller, manual CSV and automatic registration all produce identical-looking rows…