HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links★ Pro Subscribe free
← Back to Blog
Intune IntuneAutopilotComplianceWindows 11PowerShellEnrollment

Enrollment Time Grouping and Client-Driven Compliance: Two Intune Features Nobody Told You About

IA
Imran Awan
1 October 2026
Start here — what this actually is

Two separate Intune features quietly attack the same complaint — "devices take too long after enrollment to actually be usable, and compliance status lags behind reality" — and neither has had a proper explainer on this site. Enrollment Time Grouping (ETG) puts a device into its target Entra security group during enrollment instead of after, so apps and policies are already waiting the moment it reaches the desktop. Client-driven compliance evaluation (new, still in preview) lets a Windows device notice its own BitLocker, firewall or Defender state change and ask for a compliance re-check immediately, instead of waiting for the next scheduled cycle.

Both are genuinely documented by Microsoft — this isn't speculative. ETG has existed since 2024 for Autopilot and has since grown to cover six platform categories; client-driven compliance evaluation shipped to preview in September 2026. This post explains both properly, with the real registry keys, the real Graph calls, and the real limitations.

If you've never heard of either of these, you're not behind — Microsoft's own documentation for both sits several clicks deep, and neither has had the kind of plain explanation that tells you what problem it actually solves. This post gives you both: enough concept that a helpdesk analyst could follow along, and enough depth (registry keys, log markers, Graph verification calls) that an engineer can confirm it's actually working.

The short version

Enrollment Time Grouping binds a device to a static Entra security group at the moment of enrollment, not after — so Intune already knows what to deliver the instant the device appears, instead of waiting up to 8 hours for the old group-after-enrollment model to catch up. It covers Windows Autopilot device preparation, Apple automated enrollment, and Android Enterprise. Client-driven compliance evaluation is a different, newer mechanism: a supported Windows device with an up-to-date Intune Management Extension (IME) watches 14 specific security signals locally — BitLocker, firewall, Secure Boot, Defender status and more — and triggers its own compliance check-in within about a minute of a real change, instead of waiting for the scheduled cycle. Both require specific setup (ETG needs a security group owned by a particular service principal; compliance evaluation needs Defender as the active antivirus and a current IME build), and both are verifiable with nothing more than a registry read and a Graph call.

Who needs to read this

If you are…What this means for you
Autopilot / enrollment engineerETG is the fix for "the new laptop sat there for hours before apps showed up" — and it needs one specific group-ownership step most admins never do.
Compliance / security adminClient-driven compliance evaluation shrinks the gap between "user fixed the problem" and "Conditional Access notices" from hours to about a minute — but only for 14 specific signals, and only with Defender active.
Service desk / 1st lineFewer "I fixed it but it still says non-compliant" tickets once this is live — know the Defender requirement so you can explain why a third-party AV device doesn't get the fast path.
Consultant / architectBoth are configuration you do once per enrollment profile or tenant-wide, not something you build. Worth a line in every new Autopilot and compliance rollout plan from here on.

The problem: two kinds of lag that look unrelated but aren't

Here are two tickets that land on different desks but have the same root cause: Intune finding out about something later than it should.

Ticket one. A new starter's laptop finishes Autopilot, reaches the desktop, and the required line-of-business apps aren't there. Nothing failed — the apps just haven't arrived yet. The device shows as enrolled and healthy. Ask again in a few hours and everything is installed. The user's first morning on a new laptop was spent waiting.

Ticket two. A device fails a compliance check for a disabled firewall rule. The user (or an admin) re-enables it immediately. The device is now, in reality, compliant. But Conditional Access still blocks it, Intune still reports it as non-compliant, and nobody did anything wrong — the system just hasn't been told yet. The fix happened in real time; the system found out on its next scheduled check.

📋 Note: both tickets share the same shape: a true state exists on the device the moment it changes, but Intune's normal model only learns about it on a schedule. ETG closes that gap for day-one app and policy delivery. Client-driven compliance evaluation closes the same kind of gap for ongoing compliance status. They are unrelated features that happen to fix the same category of problem at two different points in a device's life.

Why it happens: group-after-enrollment, and compliance-on-a-timer

ETG: why apps used to take up to 8 hours to show up

Without enrollment time grouping, Intune groups a device the ordinary way: by its inventory properties and group tag, after it has already enrolled. Only once the device is in the right group does Intune know which apps and policies belong to it. Microsoft's own documentation is direct about the consequence: devices grouped this way "often aren't ready for immediate use," and it "can take up to 8 hours post enrollment for devices to receive all apps and policies."

That 8-hour figure isn't a bug — it's a side effect of the ordering. Group membership, then targeting, then delivery, each with their own evaluation cycle. Enrollment Time Grouping collapses the first step by letting you tell Intune the group before the device even exists in your tenant, bound to the enrollment profile itself rather than discovered afterwards.

Client-driven compliance evaluation: why "I fixed it" doesn't mean "it's compliant" yet

The older compliance model is schedule-driven: the device checks in on a timer, Intune evaluates whatever it reported at that check-in, and the result stands until the next cycle. A user who fixes a problem between check-ins is, for all practical purposes, still non-compliant until the clock comes back round.

Client-driven compliance evaluation adds a second trigger that runs independently of the schedule. A small monitor inside the Intune Management Extension watches a defined list of security-relevant values on the device. The moment one of those values changes — BitLocker gets turned back on, a firewall rule is restored, a Defender signature updates — the monitor requests an MDM check-in right then, rather than waiting.

⚠ Gotcha: this only works if Microsoft Defender is the device's active antivirus provider. A device running a supported third-party antivirus is not eligible for the fast path at all, no matter how current its signatures are — it falls back to ordinary scheduled compliance evaluation. This is worth knowing before you promise "near-instant compliance updates" tenant-wide.

How to verify: a Graph call and a registry read, no guessing

ETG: confirm a policy is actually using it

An enrollment policy with ETG configured can be checked directly through Graph, without opening the admin center at all.

Confirm ETG on a policy — Graph Explorer, read-only GET
GET https://graph.microsoft.com/beta/deviceManagement/configurationPolicies('{PolicyID}')/retrieveJustInTimeConfiguration

# ---------------- what a configured policy returns ----------------
{
  "targetGroupId": "11111111-2222-3333-4444-555555555555",
  "targetGroupDisplayName": "Shared inventory devices",
  "justInTimeConfigurationEnabled": true
}

# An unconfigured policy returns an empty or null targetGroupId instead.

If you'd rather check the group side, confirm the Intune Provisioning Client is actually an owner — this is the single most common reason ETG silently fails, because the group looks correctly configured in every other respect.

Confirm group ownership — Graph Explorer, read-only GET
GET https://graph.microsoft.com/v1.0/groups/{GroupID}/owners

# Look for an owner with appId f1346770-5b25-470b-88bd-d5744ab7952c
# displayName is usually "Intune Provisioning Client", occasionally
# "Intune Autopilot ConfidentialClient" on some tenants - same AppId,
# same thing. If neither appears in the owners list, ETG cannot write
# to this group and will fail silently.
✅ Tip: this is exactly the gotcha covered in full, with the fix, in Autopilot Device Preparation Needs an Assigned Group, Not a Dynamic One — worth reading in full if the owner check above comes back empty.

Client-driven compliance evaluation: read the monitor's own state

Everything the monitor is doing lives in the registry on the device itself, under the IME's own key. This is read-only — nothing below changes anything.

Get-ComplianceMonitorState.ps1 — read-only
$base = 'HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension'

$config = Get-ItemProperty -Path "$base\SessionSettings" -Name ComplianceMonitorConfigJson -ErrorAction SilentlyContinue
if (-not $config) {
    Write-Host "No ComplianceMonitorConfigJson found - this device has not received the feature configuration."
}
else {
    $json = $config.ComplianceMonitorConfigJson | ConvertFrom-Json
    [pscustomobject]@{
        Enabled           = $json.Enabled
        PollIntervalSecs  = $json.PollIntervalSeconds
        MaxChecksPerHour  = $json.DciMaxCheckInsPerHourPerDevice
        WatchedSettings   = ($json.Settings -join ', ')
    }
}

# ---------------- output on a device with the feature active ----------------
Enabled           : True
PollIntervalSecs  : 300
MaxChecksPerHour  : 2
WatchedSettings   : ActiveFirewallRequired, BitLockerEnabled, SecureBootEnabled, OsBuildVersion

The IME's own log confirms the monitor is actually running, not just configured. Search for these markers:

C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension.log
Log markerWhat it means
[ComplianceMonitor] Start enteredThe monitor has started on this device and is actively watching the configured signals.
decision=InvokedA watched value changed and the monitor triggered a real MDM check-in.
decision=SimulatedMicrosoft has the monitor and drift detection active but the final trigger is deliberately held in simulation mode — the value change is detected and logged, but no check-in actually fires. Treat this as "watching, not yet acting."
decision=DeviceCapReachedDeferredThe device already used its hourly allowance of fast-path check-ins (default: 2) and this trigger is deferred to the normal schedule instead.
⚠ Gotcha: seeing decision=Simulated in the log does not mean the feature is broken on that device. Microsoft stages this rollout deliberately — a device can be fully configured, correctly detecting every change, and still not fire a real check-in yet because the tenant or device is in the simulation phase. Don't raise a support case on this log line alone.

The fix: setting up both, step by step

Setting up Enrollment Time Grouping

  1. Sign in to the Microsoft Intune admin center.
  2. Go to Groups › All groups › New group.
  3. Set Group type to Security, give it a clear name, and set Membership type to Assigned — not Dynamic. ETG does not work with dynamic membership rules.
  4. Under Owners, add the service principal with AppId f1346770-5b25-470b-88bd-d5744ab7952c. It usually appears as Intune Provisioning Client; search by that AppId if you see a different name or nothing at all.
  5. Select Create. You don't need to add any devices or users to this group yet.
  6. Go to Devices › Device onboarding › Enrollment, and open (or create) the enrollment policy for your platform — Windows Autopilot device preparation, Apple automated device enrollment, or Android Enterprise.
  7. In the policy, add the security group you just created as its enrollment time group. You can add exactly one static group per policy.
  8. Save the policy. The setting applies to devices enrolling from this point forward only — it has no effect on devices already enrolled.
Intune Admin Center — New group
Group typeSecurity
Membership typeAssigned
OwnersIntune Provisioning Client
⚠ Warning: if you later remove a device from the ETG security group, Intune reevaluates its policy configuration and forces a check-in to strip whatever no longer applies. Don't remove a device from this group as a casual cleanup action — it has an immediate, real effect on what that device is allowed to keep.
📋 Note: ETG for Apple ADE currently has a known gap — the console gives you no Remove option for an existing ETG group on an Apple automated enrollment policy. The workaround until Microsoft fixes it is either delete and recreate the policy, or call Graph directly: DELETE https://graph.microsoft.com/beta/deviceManagement/configurationPolicies('{policyId}')/clearEnrollmentTimeDeviceMembershipTarget.

Checking whether client-driven compliance evaluation applies to you

This feature isn't something you switch on yourself yet — it's a Microsoft-controlled preview rollout to supported Windows devices. There's no admin center toggle to find. What you can do is confirm whether your devices qualify and are receiving it:

  1. Confirm Microsoft Defender is the active antivirus provider on the device. Any other antivirus, even a fully supported one, disqualifies the device from the fast path entirely.
  2. Confirm the Intune Management Extension is at version 1.103.101.0 or later — run the version check in the quick reference table below.
  3. Run the read-only registry check from the previous section to see whether the device has actually received a ComplianceMonitorConfigJson configuration yet.
  4. Check the IME log for [ComplianceMonitor] Start entered to confirm the monitor is live, and watch for decision=Invoked after deliberately toggling a watched setting (for example, briefly disabling then re-enabling a firewall rule on a test device) to see the fast path actually fire.
✅ Tip: test this safely on one pilot device rather than inferring it from a production incident. Disable a non-critical firewall rule, re-enable it, and watch the log for a decision=Invoked entry within about a minute. That one test tells you more than any amount of reading.

Proof it worked: what success looks like for each

ETG: the device is in the group before it finishes setup

Check the security group's membership while the device is still mid-Autopilot — on the Please wait screen, before the user ever reaches the desktop. If ETG is working, the device already appears as a member at that point, not minutes or hours after.

Entra admin center — Group membership
Group: Shared inventory devices
Member: DESKTOP-7Q2KX1 — added during enrollment, device status: still provisioning

Also worth checking the failure report, which exists specifically to catch the cases where this doesn't happen:

Devices › Monitor › Enrollment time grouping failures
📋 Note: this report only ever shows failures, never successes — an empty report is the good outcome. Data can take up to 20 minutes to appear, so don't treat a device missing from the report moments after enrollment as confirmed success either way; check back after the delay.

Client-driven compliance evaluation: a real-time fix clears in about a minute

On a pilot device with the monitor confirmed active, deliberately disable a watched setting, fix it, and time how long it takes to clear.

IntuneManagementExtension.log — real test run
# Firewall rule disabled at 10:14:02, re-enabled at 10:14:40

[ComplianceMonitor] detected change: ActiveFirewallRequired False -> True
[ComplianceMonitor] decision=Invoked, reason=SettingChanged, setting=ActiveFirewallRequired
[ComplianceMonitor] MDM check-in requested

# Compliance status in the Intune admin center updated to Compliant
# at 10:15:31 - 89 seconds after the fix, not the next scheduled cycle.
✅ Tip: "about a minute" is the realistic number to set expectations with, not "instant." The detection itself happens within roughly 60 seconds of the change, and the MDM check-in, Intune processing and portal summarisation add a little more on top. Still a dramatic improvement over a multi-hour schedule, but say "about a minute" to stakeholders, not "instant."

Quick reference: every registry key, signal and requirement

Enrollment Time Grouping

ItemValue
Supported enrollment methodsWindows Autopilot device preparation, Apple ADE (iOS/iPadOS, tvOS, visionOS, macOS), Android Enterprise (fully managed, corporate-owned work profile, dedicated)
Supported Windows platformWindows 11
Required group settingsSecurity group, Assigned membership (not Dynamic)
Required ownerService principal AppId f1346770-5b25-470b-88bd-d5744ab7952c (Intune Provisioning Client / Intune Autopilot ConfidentialClient)
Groups per policyOne static group per enrollment policy
Verify a policyGET .../configurationPolicies('{id}')/retrieveJustInTimeConfiguration
Remove ETG from an Apple ADE policy (workaround)DELETE .../configurationPolicies('{id}')/clearEnrollmentTimeDeviceMembershipTarget
Failure reportingDevices › Monitor › Enrollment time grouping failures (failures only, up to 20 min delay)
Not compatible withThe staging token (use the corporate-owned fully managed or corporate-owned work profile default token instead)
Without ETGUp to 8 hours post-enrollment before all apps/policies arrive (Microsoft's own figure)

Client-driven compliance evaluation

ItemValue
StatusPreview, Windows devices only, rolling out from September 2026
Antivirus requirementMicrosoft Defender must be the active provider
Minimum IME version1.103.101.0
Default poll interval300 seconds (configurable 60–3,600)
Default rate cap2 fast-path check-ins per hour (configurable 0–10)
Detection window~60 seconds from change to detection, plus normal MDM round-trip
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IntuneManagementExtension\
Key / valueHolds
SessionSettings\ComplianceMonitorConfigJsonThe full configuration pushed from the service — enabled state, poll interval, rate cap, and the list of watched settings
ComplianceMonitor\ConfigThe monitor's own cached copy of that configuration
ComplianceMonitor\Settings\<SettingName>\LastValueThe last known value for each watched signal, one subkey per setting, used to detect a change
ComplianceMonitor\Config\RateWindowWindowStartTicks and Count — the rolling hourly cap that throttles fast-path check-ins
Watched signalRead from
ActiveFirewallRequiredMDM Bridge WMI (root\cimv2\mdm\dmmap)
BitLockerEnabled
SecureBootEnabled
DefenderEnabled, RtpEnabled, DefenderVersion, SignatureOutOfDate, AntivirusRequired, AntivirusRequireCurrentSignature, AntiSpywareRequired, AntiSpywareRequireCurrentSignatureDefender WMI providers
CodeIntegrityEnabledWin32_DeviceGuard
TpmRequiredWin32_Tpm
OsBuildVersionRegistry CurrentBuild and UBR, combined
📋 Note on the published minimum OS build: Microsoft's own figure for this feature lists Windows build 15063 as the floor — that's the 2017 Creators Update. In practice this is the long-standing minimum for MDM Bridge WMI itself, not a meaningful floor for this specific feature: the IME version requirement (1.103.101.0 or later) already rules out any device old enough for that build number to matter.

Glossary

TermWhat it means here
Enrollment Time Grouping (ETG)Binding a device to a static Entra security group at the point of enrollment, rather than afterwards, so targeted apps and policies are already resolved when the device appears.
Intune Provisioning ClientThe Microsoft first-party service principal (AppId f1346770-5b25-470b-88bd-d5744ab7952c) that actually writes the device into the ETG group during enrollment. Must be an owner of the group, or ETG fails silently.
Client-driven compliance evaluationA Windows-only preview feature where the device itself detects a change in a watched security setting and requests an immediate compliance check-in, instead of waiting for the scheduled cycle.
Fast pathThe immediate, event-triggered check-in client-driven compliance evaluation uses, as distinct from the normal scheduled compliance cycle.
Simulation modeA staged rollout state where the monitor detects and logs a qualifying change but deliberately does not trigger a real check-in — visible in the log as decision=Simulated.

Frequently asked questions

Do I need to buy anything extra for either of these?

No. Both are part of standard Intune licensing — there's no separate add-on. Client-driven compliance evaluation additionally requires Microsoft Defender as the active antivirus, which most Intune-managed Windows fleets already run.

Does ETG work with a dynamic device group?

No. The group must have Assigned membership. A dynamic group's membership is calculated by a rule engine after the fact, which is exactly the delay ETG exists to remove — Intune needs to write a device into the group directly and immediately, which only an assigned group allows.

My device is on Defender but I'm still not seeing fast compliance updates. Why?

Check three things in order: the IME version (must be 1.103.101.0 or later), whether ComplianceMonitorConfigJson exists yet under SessionSettings (the service may not have pushed it to this device yet), and the log for decision=Simulated entries, which mean the monitor is working but the tenant or device is still in the staged rollout and not yet triggering real check-ins.

Can a user spam compliance check-ins by toggling a setting repeatedly?

No — that's exactly what the rate cap is for. The default allows 2 fast-path check-ins per hour per device; anything beyond that falls back to the normal scheduled cycle until the hourly window resets, logged as decision=DeviceCapReachedDeferred.

Is there a Group Policy equivalent for either of these?

No. Both are cloud-side Intune/Entra mechanisms with no on-premises Group Policy or local CSP equivalent to configure directly — ETG is set on the enrollment policy in the Intune admin center, and client-driven compliance evaluation is a service-controlled rollout to the IME, not something you toggle via policy.

References

Microsoft MVP community deep-dives

AuthorPostWhat it adds
Rudy Ooms (MVP)Device Preparation: Enrollment Time GroupingThe service-side mechanics of when and how the device is actually written into the group during the Autopilot "please wait" screen, and the Graph call used to verify a policy's configuration in this post.
Peter van der Woude (MVP)Understanding enrollment time groupingThe service principal naming variation between tenants (Intune Provisioning Client vs. Intune Autopilot ConfidentialClient) and current platform constraints.
Rudy Ooms (MVP)Inside Intune Client-Driven Compliance Evaluation for Windows DevicesThe full reverse-engineered mechanism this post's registry table and log markers are drawn from — every registry key, the JSON configuration shape, the rate-limiting logic, and the WMI sources behind each watched signal.

Related reading on EndpointWeekly

Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Autopilot
Corporate or personal? How Autopilot devices get their ownership…
Intune stamps device ownership at enrolment time based purely on the enrolment route.…
Intune
How to Look Up a Windows Autopilot Device by Serial Number Using…
The exact Graph PowerShell filter syntax to look up any Autopilot device by serial number…
Intune
Microsoft Store Apps in Intune — Deployment & Troubleshooting,…
Store for Business is gone — modern Intune Store apps are winget-backed. The full…