HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Autopilot AutopilotCo-managementConfiguration ManagerIntuneCCMSETUPCloud Management GatewayEnrollment Status PageProvisioning ModeWorkload Authority

Autopilot into co-management: the ConfigMgr client handshake that has to happen in order

IA
Imran Awan
21 August 2026

A co-managed Windows device is one that two management authorities look after at the same time. Microsoft Intune owns some workloads. Microsoft Configuration Manager owns the rest. That split only works if both sides agree on the map. On a device built by Windows Autopilot, that agreement has to be reached during provisioning, while the device is still in the out-of-box experience (OOBE) and nobody is watching.

When it goes wrong, it does not look like a failure. The device finishes OOBE. It appears in the Intune admin center. It has a Configuration Manager client folder on disk. Software Center even opens. But the client never registered with the site, so it never received the co-management policy, so it never learned which workloads it owns. Some workloads are now owned by nobody in practice. That is the failure this post is about, and the cause is almost always ordering.

The short version

Autopilot into co-management needs three handshakes to land in order: Entra join plus Intune enrollment, then Configuration Manager client install and registration from the cloud management gateway, then the co-management policy that assigns workload authority. Microsoft no longer wants you to install the client as an Intune Win32 app; the co-management settings policy in Intune installs it as a first-party app and the enrollment status page waits for it. Installing a client is not the same as registering one, and an unregistered client never gets a workload map. Prove it on the device from the documented registry, WMI and log surfaces rather than trusting the portal.

The problem: a device that is enrolled, has a client, and obeys neither

Start with what a half-managed device actually looks like, because the symptoms are quiet.

The device completed Autopilot. It is Microsoft Entra joined. It has an Intune managed-device record. It reports a compliance state. On disk it has a C:\Windows\CCM folder and a running CcmExec service. Everything an inventory report checks is green.

Now look at behaviour. Windows Update policies from Intune are not applying, because the client believes Configuration Manager owns that workload. Configuration Manager is not applying anything either, because the client never registered with the site, so it has no policy to apply. The device sits in a gap. Nothing errors. Nothing patches.

The same gap opens in the other direction. A Configuration Manager configuration baseline that used to apply stops applying, because Intune is now the device configuration authority. But the Intune profile that was supposed to replace it was never assigned, because the device group used for the co-management settings policy is not the group used for configuration profiles. Two authorities, one uncovered workload.

Context: Microsoft explicitly flags that co-management and Microsoft Entra join get confused with each other. Co-management is a management option. Microsoft Entra ID is an identity option. A device can be Entra joined and not co-managed, and it can be co-managed while hybrid joined. Getting the identity right does not get the management right, and vice versa.

There are three distinct ways this ends up half-managed, and they are worth naming separately because the fix differs for each.

FailureWhat you seeWhat actually happened
Client never installedNo C:\Windows\ccmsetup folder at allThe bootstrap installer never downloaded. Policy assignment or licensing problem, not a cloud management gateway problem.
Client installed, never registeredCcmExec running, no client GUID, no assigned siteThe client could not authenticate to the cloud management gateway, or it is stuck in provisioning mode. It will never receive co-management policy.
Registered, wrong workload mapEverything healthy, individual workloads misbehavingThe device got the wrong co-management settings policy, or a workload was switched to Pilot Intune, which Microsoft documents as unsupported for this flow.

Why it happens: three handshakes, one ordering constraint

Autopilot into co-management is not one operation. It is three handshakes, and each one depends on the one before it. Understanding the dependency chain is the whole game, so here it is in order.

Handshake one: identity and MDM

The device joins Microsoft Entra ID and enrolls in Intune. Microsoft documents that this happens first, before anything Configuration Manager related. In user-driven mode the device has already completed the join and the enrollment by the time the enrollment status page appears.

Handshake two: client install and registration

This is the step people get wrong, and it has two halves that are easy to conflate.

The install half is that the device downloads CCMSetup.msi, a small bootstrap file, from the Intune service. It runs that bootstrap with the command-line parameters you supplied. Those parameters tell it where the cloud management gateway is. It then downloads the full client installation content from the gateway. That content is the site's production client version.

The registration half is separate. Once installed, the client communicates through the gateway, registers with the site, and only then requests policy. Registration is what mints a client GUID and assigns a site code. A client that installed but did not register is a client that will never ask for co-management policy.

Gotcha: Microsoft documents that if the task sequence started by the PROVISIONTS property installs software updates or applications, the client needs a valid client authentication certificate. Token authentication alone is documented as not working for that. Separately, Microsoft documents that Autopilot into co-management does not support clients that authenticate with PKI certificates, because you cannot provision the certificate before the client needs to authenticate to the gateway. Read those two constraints together before you point PROVISIONTS at a task sequence full of app installs.

Handshake three: workload authority

Only after registration does the client request policy and receive the co-management policy that tells it which workloads Intune owns. Microsoft describes the Intune side of this as setting the management authority on the device during the device preparation phase of the enrollment status page, based on the co-management settings policy. If that policy names Configuration Manager as the authority, the service does not apply Intune policies. It waits for policy from Configuration Manager to determine the workload configuration.

That word "waits" is the ordering constraint. Miss handshake two and handshake three never happens, and the device sits waiting for an authority that never speaks.

Why the old Win32 app approach was replaced

For years the accepted method was to package ccmsetup.msi as an Intune Win32 app and assign it. Microsoft's own documentation is unusually blunt about why that was a problem: installing the Configuration Manager client as a Win32 app "introduces component timing and policy delays". The Win32 app is delivered by the Intune Management Extension, which is a different policy provider with its own schedule. Nothing coordinates it with the enrollment status page.

The replacement is the co-management settings policy in Intune. Microsoft states plainly that you no longer need to create and assign an Intune app to install the client. The Intune enrollment policy installs the client as a first-party app, and the device gets the client content from the cloud management gateway, so you do not manage client content in Intune at all. You still supply the command-line parameters.

Watch out: Microsoft warns against changing the Override co-management policy and use Intune for all workloads advanced setting after device provisioning. It applies to existing devices in the assigned group, not only new devices going through Autopilot. Because of policy synchronisation timing, Microsoft documents the behaviour of that change as non-deterministic and says it should be avoided. Create a second policy for a new group instead of editing a live one.

The Windows 11 default that catches everyone

This one deserves its own paragraph because it is the single most common cause of "the client is there but Intune owns everything".

Microsoft documents that on a Windows 11 device that has not been targeted with a co-management settings policy, the management authority is set to Microsoft Intune during the Autopilot process. Installing the Configuration Manager client as a Win32 app afterwards does not change the management authority. Intune continues to manage all the co-management workloads regardless of what the Configuration Manager slider says.

The documented remedy is counter-intuitive. To set the management authority to Configuration Manager, you create a co-management settings policy with both advanced settings set to No: Automatically install the Configuration Manager client set to No, and Override co-management policy and use Intune for all workloads set to No. You create a policy that installs nothing, purely to hand authority back.

Provisioning mode: the client that is present and deliberately deaf

If you use PROVISIONTS to run a task sequence, provisioning mode enters the picture. Microsoft documents that during an operating system deployment task sequence the client is placed in provisioning mode, and in that state the client does not process policy from the site. This is deliberate: it stops other deployments running while the task sequence works.

The problem is what happens when the task sequence fails in a way it cannot recover from, for example a restart mid-processing. The client is left in provisioning mode. It is installed, it is registered, and it is ignoring the site. An administrator has to identify and fix it manually. Microsoft documents a 48-hour default timeout after which the client exits provisioning mode by itself and restarts its process, and a documented way to adjust that timer.

Watch out: Do not fix provisioning mode by editing the registry. Microsoft states that the supported SetClientProvisioningMode method sets a registry value but also makes other changes, and that changing the registry value alone does not fully take the client out of provisioning mode. A hand-edited client may exhibit unexpected behaviours. Read the value to diagnose; use the documented method to remediate.

How to verify: proving which authority owns each workload

Verification comes before the fix here, because on a half-managed device you cannot tell which handshake failed without looking. Each handshake has its own documented surface.

The registry surfaces

Everything below sits under one parent key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
Subkey and valueDocumented meaningHealthy after Autopilot
CCM\CcmExecProvisioningModeWhether the client is in provisioning mode and therefore not processing site policyfalse
CCM\CcmExecProvisioningEnabledTimeTimestamp of the last time the machine entered provisioning mode. Documented format is Unix epoch seconds, in UTCAbsent, or a time you can account for
CCM\CcmExecProvisioningMaxMinutesOverrides the provisioning mode timeout, in minutes. If absent or 0, the documented default of 48 hours appliesAbsent unless you deliberately set it
Windows\Autopilot\EnrollmentStatusTracking\Device\DevicePreparation\PolicyProviders\ConfigMgrInstallationStateHow the enrollment status page tracked the client install. Documented values: 1 not installed, 2 not required, 3 complete, 4 error3
Windows\Autopilot\EnrollmentStatusTracking\Device\Setup\Apps\Tracking\ConfigMgr\Provisioning_TSInstallationStateHow the enrollment status page tracked the PROVISIONTS task sequence. Documented values: 1 not installed, 2 in progress, 3 complete, 4 error3, or absent if you do not use PROVISIONTS
Enrollments\{EnrollmentGUID}ProviderIDThe MDM enrollment records on the deviceAn enrollment naming the MDM provider
Gotcha: note that InstallationState value 2 means different things in the two keys. Under DevicePreparation Microsoft documents 2 as "not required". Under Setup\Apps\Tracking Microsoft documents 2 as "in progress". Same value name, same data type, different meaning. Do not write one lookup table for both.

Here is the same thing as a Registry Editor panel, so you know what you are looking at when you open it during OOBE with Shift and F10.

Registry Editor
📁 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\CcmExec
ProvisioningMode   REG_SZ   false
📁 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Autopilot\EnrollmentStatusTracking\Device\DevicePreparation\PolicyProviders\ConfigMgr
InstallationState   REG_DWORD   0x00000003 (3)
📁 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Enrollments\{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}
ProviderID   REG_SZ   MS DM Server

The WMI surfaces

On the device, the client's own namespace answers handshake two. Microsoft documents the SMS_Client class with a ClientVersion property, and documents reading the client's unique identifier from the CCM_Client class in the root\ccm namespace. A present client version with an absent client GUID is the exact signature of install-without-registration.

PowerShell — on the device (run elevated)
Get-CimInstance -Namespace 'root\ccm' -ClassName 'SMS_Client' | Select-Object ClientVersion # The client is installed. A version here proves handshake two's FIRST half only. (Get-CimInstance -Namespace 'root\ccm' -ClassName 'CCM_Client').ClientId # A GUID here proves REGISTRATION. Empty means the client never registered, # so it has never asked the site for co-management policy. This is the gap. Invoke-CimMethod -Namespace 'root\ccm' -ClassName 'SMS_Client' ` -MethodName 'GetAssignedSite' # sSiteCode should be your three-character site code, not empty. Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\CCM\CcmExec' | Select-Object ProvisioningMode, ProvisioningEnabledTime # ProvisioningMode must be false. True means the client is ignoring site policy.
Context: on the site server side, Microsoft documents the SMS_Client_ComanagementState WMI class in the ROOT\SMS\site_<SITECODE> namespace. A device is documented as co-managed only when both the MDMEnrolled field and the ComgmtPolicyPresent field have a value of 1. That is the cleanest fleet-wide query for half-managed devices, and it explicitly notes that if MDMEnrolled is 0 the device is not co-managed whatever co-management policy exists on the client.

The enrollment status page tracking surface

PowerShell — the documented ESP tracking check
$key = 'HKLM:\SOFTWARE\Microsoft\Windows\Autopilot\EnrollmentStatusTracking' + '\Device\DevicePreparation\PolicyProviders\ConfigMgr' Get-ItemPropertyValue -Path $key -Name InstallationState # 3 = Complete. 1 = the bootstrap never downloaded or never started. # 4 = CCMSetup failed; go read ccmsetup.log for the reason. Get-Content "$env:WinDir\ccmsetup\Logs\ccmsetup.log" -Tail 40 # WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA here means the device does not trust # the cloud management gateway server authentication certificate.

The log surfaces, and why there is no Event ID catalog

This topic has no numbered Windows event catalog. Microsoft documents the diagnostic surface for Autopilot into co-management as two things: Configuration Manager log files, and CloudExperienceHost ETW entries in the Shell-Core logs collected by the MDM diagnostics tool. There are no documented Event Viewer event IDs for the co-management handshake, so this post does not invent any. Use the logs.

All the client logs below live in one folder:

%WinDir%\CCM\Logs  (client installation logs are in %WinDir%\ccmsetup\Logs)
LogDocumented purposeWhat it proves here
ccmsetup.logRecords ccmsetup.exe tasks for client setup, upgrade and removalWhether the install half of handshake two happened, and why it failed
ClientIDManagerStartup.logCreates and maintains the client GUID and identifies tasks during client registration and assignmentWhether the registration half of handshake two happened
ClientLocation.logRecords tasks related to client site assignmentWhether the client found and kept a site
CoManagementHandler.logDocumented as the log to troubleshoot co-management on the clientHandshake three. Carries the merged capabilities value
ComplRelayAgent.logRecords information for the co-management workload for compliance policiesWhich authority owns compliance, in the client's own words
CIAgent.logRecords remediation and compliance for compliance settings, updates and app managementWhich authority owns resource access and configuration items
WUAHandler.logRecords Windows Update Agent detail when the client searches for updatesWhich authority owns Windows Update policies
SMSTS\smsts.logRecords task sequence activitiesWhy a PROVISIONTS task sequence failed and left provisioning mode set

The interesting part is that the component logs show the client doing the bitwise arithmetic itself. Microsoft's own sample lines look like this.

CMTrace — %WinDir%\CCM\Logs\ComplRelayAgent.log
Verifying if workload 2 is enabled in workloadFlags 7 Result of & operation is 2 Feature flag is ON, device should be Intune managed. CA workload is disabled for ConfigMgr. No compliance state to report for user SID <SID> --- %WinDir%\CCM\Logs\WUAHandler.log --- Verifying if workload 16 is enabled in workloadFlags 7 Result of & operation is 0 Feature flag is OFF, should be SCCM managed. --- %WinDir%\CCM\Logs\CoManagementHandler.log --- Getting/Merging value for setting 'CoManagementSettings_Capabilities' Merged value for setting 'CoManagementSettings_Capabilities' is '7' Merged value for setting 'CoManagementSettings_Allow' is 'true' Machine is already enrolled with MDM

This is the definitive per-workload answer. The client states the workload bit it is testing, states the flags value it is testing against, states the result of the bitwise AND, and then states its verdict in plain English: Intune managed, or SCCM managed. You do not have to decode anything.

Gotcha: only three workload bit values appear in Microsoft's documentation, inside those sample log lines: 2 for compliance policies, 4 for resource access policies, and 16 for Windows Update policies. The other bit values in wide circulation come from community analysis, not from Microsoft. The CoManagementFlags registry value that mirrors the flags number is likewise visible in client log output but is not documented as a supported surface. Read them as strong hints. Do not build a compliance rule or a management report on an undocumented bitmask.

The fix: the documented Autopilot into co-management sequence

Three configurations, in this order. Do not reverse them.

Step 1: get the command line out of the Configuration Manager console

Configuration Manager consoleAdministration › Cloud ServicesCloud Attach
  1. In the Configuration Manager console, go to the Administration workspace, expand Cloud Services, and select the Cloud Attach node. On version 2103 and earlier this node is called Co-management.
  2. Select the co-management object and choose Properties in the ribbon.
  3. On the Enablement tab, copy the command line. Paste it somewhere safe.
  4. If the tab says the prerequisites are not installed, you do not have a cloud management gateway. Microsoft documents that the command line only appears once all prerequisites, including the gateway, are met. Stop here and build the gateway first.

Then decide which properties you actually need. Microsoft's guidance on this is refreshingly short.

PropertyWhen it is requiredWhat it does
CCMHOSTNAMEAlwaysThe address of the cloud management gateway. Documented as taking no https:// prefix, unlike the /mp parameter
SMSSITECODEAlwaysAssigns the client to a site. Documented as not to be used with AUTO when CCMHOSTNAME is set
AADCLIENTAPPIDWhen the device has both Entra and a PKI client authentication certificate, and you want Entra usedThe Entra client (native) app identifier
AADRESOURCEURISame condition as aboveThe Entra server app identifier, the App ID URI
SMSMPIf the client roams back to the intranetThe initial management point for the installed client
PROVISIONTSOnly if you want a task sequence after registrationStarts the named task sequence deployment after the client successfully registers. Documented not to start at all if registration fails
UPGRADETOLATESTRecommended for this flowForces a location request so the device installs the latest client version immediately rather than the production baseline
/NoCRLCheckOnly with your own PKI when the CRL is not published to the internetSkips the revocation check. Microsoft recommends publishing the CRL instead
Tip: Microsoft calls out UPGRADETOLATEST specifically for Autopilot into co-management. The reason is a genuine chicken-and-egg: a newly installed client cannot evaluate a pre-production collection until it is installed, so it takes the production baseline and only upgrades later. UPGRADETOLATEST makes the freshly provisioned device take the right version straight away. Also mind the length limit — Microsoft documents that Intune limits the command line to 1024 characters and that installation fails above it.

Step 2: create the co-management settings policy in Intune

intune.microsoft.comDevices › Enroll devicesWindows enrollmentCo-management settings
  1. Go to the Microsoft Intune admin center. Select Devices, then Enroll devices, then Windows enrollment.
  2. Select Co-management settings, then select Create.
  3. On the Basics page, give the policy a name and an optional description.
  4. On the Settings page, select Yes to automatically install the Configuration Manager client.
  5. Paste the client installation command-line parameters you copied in step 1.
  6. In the Advanced area, leave Override co-management policy and use Intune for all workloads at No unless you genuinely want Intune to own everything and the client to exist only for app delivery.
  7. On the Assignments page, target a device group. Microsoft is specific about this: a device group, not a user group.
  8. Review and create.

If you assign more than one such policy, Microsoft documents that Intune pre-computes which policy it serves to the device, and that the Co-management authority pane in the admin center lists the policy settings so you can set a priority per setting.

Tip: there is no Group Policy equivalent for any of this. The co-management settings policy, the enrollment status page profile and the Autopilot deployment profile are all Intune service objects delivered over MDM. If your change-control process expects a Group Policy Object path in the ticket, the honest answer is that this setting is service-side only, and the on-device surface is the registry and WMI in the verification section above.

Step 3: assign an enrollment status page profile to the same group

intune.microsoft.comDevices › Device onboarding › EnrollmentWindows › Windows AutopilotEnrollment Status Page
  1. In the admin center, select Devices, expand Device onboarding, and select Enrollment.
  2. On the Windows tab, under Windows Autopilot, select Enrollment Status Page, then Create.
  3. Name the profile on the Basics page.
  4. On the Settings page set Show app and profile configuration progress to Yes. Microsoft documents this as a requirement for Autopilot into co-management, not an option.
  5. Review Show an error when installation takes longer than specified number of minutes. The documented default is 60 minutes. That is the same 60 minutes the client install and any PROVISIONTS task sequence have to finish inside.
  6. Assign the profile to the same device group as the co-management settings policy, and assign the Autopilot deployment profile there too.

What this buys you is the ordering guarantee. Microsoft documents that when the device is targeted with an enrollment status page policy, the device waits for the Configuration Manager client to be installed; the client installs, registers with the site, and applies the production co-management policy; and only then does the enrollment status page continue. That is handshake two and handshake three completing before the user reaches the desktop, which is exactly what the Win32 app approach could not promise.

The limitations you must design around

Microsoft documents these as unsupported for Autopilot into co-management. Check them before you build.

Not supportedDocumented consequence
Microsoft Entra hybrid joined devicesIf the device is targeted with a co-management settings policy, Autopilot provisioning times out during the ESP phase
Autopilot device preparation policyAttempting to install co-management during that flow might result in failed deployments
Autopilot pre-provisioningNot supported
Workloads switched to Pilot Intune with pilot collectionsDepends on collection evaluation, which does not happen until after the client registers, so behaviour is indeterminate
Clients that authenticate with PKI certificatesThe certificate cannot be provisioned before the client must authenticate to the gateway. Entra is the recommended client authentication method
Mixing the Intune Management Extension as a second policy providerDocumented as causing conflicts, because each provider is not aware of the others

There is also a separate, older documented limitation worth knowing even outside this feature: you cannot deploy the Configuration Manager client while provisioning a new computer in Autopilot user-driven mode for Entra hybrid join, because the device identity changes during the hybrid join process. Deploy the client after Autopilot finishes in that case.

Proof it worked: three handshakes, all landed

The companion script for this post reports all three handshakes separately, so you can see which one is missing rather than guessing. It is read-only. It reads the documented registry values, the documented WMI classes and the documented log surfaces, decodes the workload map, and clearly labels which bit values Microsoft actually publishes and which are community-derived.

Get-CoManagementHandshakeState.ps1 — sanitised output, illustrative values
[2] Configuration Manager client presence and version CcmExec service : Running [OK] SMS_Client.ClientVersion : 5.00.nnnn.nnnn [OK] [3] Site registration (install is not registration) Client GUID (CCM_Client.ClientId) : present (value not printed) [OK] Assigned site code : ABC [OK] # If the GUID line said "absent" while section 2 said Running, that is the # half-managed signature. Client installed, never registered. [4] Provisioning mode ProvisioningMode : false [OK] ProvisioningMaxMinutes : not set - documented default of 48 hours applies [5] Autopilot ESP tracking for the ConfigMgr policy provider DevicePreparation ConfigMgr provider : 3 - Complete [OK] [6] Per-workload authority as the client reports it CoManagementSettings_Capabilities : 7 [OK] Bit Workload Authority Bit source ----- -------------------------- ---------- ----------- 2 Compliance policies Intune DOCUMENTED 4 Resource access policies Intune DOCUMENTED 16 Windows Update policies ConfigMgr DOCUMENTED # Only DOCUMENTED rows are published by Microsoft. Community rows are printed too, # labelled as such, so you never quote an undocumented bitmask as fact. ComplRelayAgent.log : evaluation(s) found [OK] Verifying if workload 2 is enabled in workloadFlags 7 Feature flag is ON, device should be Intune managed. [X] Handshake summary Handshake 1 - Entra join + Intune MDM : landed [OK] Handshake 2 - client installed + registered : landed [OK] Handshake 3 - co-management policy applied : landed [OK]

The script was run on a real co-managed client during writing, and the registry, WMI and log parsing all resolved correctly. The block above is sanitised: site code, client version and the capabilities number are replaced with placeholder or documented-sample values, because raw output from these logs can contain the device's Entra device ID and tenant ID. Bear that in mind before you paste a log tail into a ticket.

Tip: when a handshake is missing, fix the lowest-numbered failing one first. Handshake three cannot land without two, and two cannot land without one. Chasing a wrong workload map on a device that never registered is wasted time.

For the failures themselves, Microsoft documents the specific signatures. Error 0x800705b4 during device preparation means the enrollment status page timed out waiting for the client to install; the documented default timeout is 60 minutes. In the Shell-Core logs collected by the MDM diagnostics tool, the corresponding entry names CommercialOOBE_ESPDevicePreparation_PolicyProvidersInstallation_TimedOut. If instead the device setup phase shows an error for Apps, the entry names CommercialOOBE_BootstrapStatusCategory_SubcategoryProcessing_Failed and the task sequence log at %WinDir%\CCM\Logs\SMSTS\smsts.log has the reason.

Collect logs during OOBE with Shift and F10, then the documented MDM diagnostics command. Note the documented caveat: that tool does not collect the CCMSetup and client logs, so gather %WinDir%\ccmsetup\Logs and %WinDir%\CCM\Logs by hand.

Command prompt — during OOBE, opened with Shift and F10
%windir%\system32\mdmdiagnosticstool.exe -area Autopilot;DeviceEnrollment ^ -cab %temp%\autopilot-logs.cab # Documented command. Collects the Autopilot and enrollment areas, including # the Shell-Core ETW entries that name the ESP failure. robocopy %windir%\ccmsetup\Logs %temp%\ccm-collect\ccmsetup /S robocopy %windir%\CCM\Logs %temp%\ccm-collect\ccm /S # The diagnostics tool does NOT collect these. Gather them separately or you will # have an ESP timeout with no explanation of what CCMSetup was doing.

One last piece of advice that comes straight from Microsoft's recommendations rather than from experience: when you run a task sequence after client installation, do not fill it with application installs. Many apps delay the process and risk the enrollment status page timeout. Include only critical apps that are needed immediately, and deliver the rest through separate deployments or user self-service. A 60-minute budget shared between a client download, a client install, a registration round trip and a task sequence is tighter than it looks.

References

Microsoft official documentation:

Community deep-dives worth reading alongside the docs:

AuthorPostWhy it is useful here
Ben WhitmoreCo-management Workloads and Capabilities (Revisited)The most careful public write-up of the capabilities flag arithmetic, including the bit values Microsoft does not publish. Treat those values as community-derived, which is exactly how the post itself frames them.
Martin BengtssonDeploy the SCCM Client using Microsoft Intune and the Cloud Management GatewayWalks the older Win32-app route end to end, including the Autopilot ordering and the device-versus-user assignment problem. Useful context for why the first-party install replaced it.
Peter van der WoudeDeploying the ConfigMgr client via Microsoft IntuneA clear breakdown of each command-line property and where its value comes from, which is still the part people get wrong.

Companion script for this post: Get-CoManagementHandshakeState.ps1. Read-only, ASCII-only, runs on Windows PowerShell 5.1 and PowerShell 7, prompts before installing anything, and aborts loudly rather than reporting a clean co-management state it could not actually prove.

PowerShell — companion script

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

Get-CoManagementHandshakeState.ps1 — Reports the local co-management handshake state on a Windows device: Configuration
View all scripts on GitHub
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Autopilot
Autopilot pre-provisioning: the reseal step is the part everyone…
The green success screen at the end of an Autopilot technician flow confirms enrollment,…
Autopilot
Which apps actually block the Enrollment Status Page (and why…
You set the ESP to block until your required apps install, it cleared in four minutes,…
Autopilot
The ESP Hit Its Time Limit, The User Clicked Continue Anyway,…
The Enrollment Status Page time limit is not a patience setting. It is the moment Windows…