ANAVEM
Languagefr
How to Fix Intune Policy Tattooing When Deleted Settings Persist

How to Fix Intune Policy Tattooing When Deleted Settings Persist

Learn to diagnose and resolve Intune policy tattooing issues where removed configurations continue enforcing on devices through SyncML analysis and systematic remediation.

March 26, 2026 18 min
hardintune 8 steps 18 min

What Causes Intune Policy Tattooing Issues?

Intune policy tattooing occurs when configuration policies that have been deleted or unassigned from the Microsoft Intune admin center continue to enforce their settings on managed devices. This happens because the necessary Delete commands in SyncML (Synchronization Markup Language) are not being sent to devices, leaving policies "tattooed" in the Windows registry and continuing to control device behavior.

The most common root cause is invalid assignment filters in your Intune tenant. When a configuration profile references a deleted or corrupted assignment filter, it can block the entire deletion pipeline for all policies across your tenant. This means that even unrelated policies may fail to be properly removed from devices, creating widespread tattooing issues.

How Does Modern Windows Handle Policy Tattooing?

Microsoft significantly improved policy handling in Windows 10 build 1903 and later through the Policy CSP refresh mechanism. Instead of permanently tattooing settings into the registry, newer Windows versions refresh policy settings during each sync cycle. However, certain Configuration Service Providers (CSPs) like RemovableStorageAccess and some BitLocker-related settings can still exhibit tattooing behavior even on modern Windows versions.

Understanding the difference between tattooed policies and properly managed policies is crucial for troubleshooting. Properly managed policies generate Event ID 819 (Delete Policy) in the Windows event logs when removed, while tattooed policies show no such deletion events despite being removed from the Intune console.

Why Is SyncML Analysis Critical for Diagnosis?

SyncML traces provide the definitive evidence of policy tattooing by showing exactly what commands Intune sends to your devices. A healthy policy removal process shows Add commands when policies are applied, followed by Delete commands when policies are removed. Tattooed policies will show Add or Replace commands but never the corresponding Delete commands, even after the policy has been removed from the Intune admin center. This diagnostic approach allows you to definitively identify whether the issue is tenant-side (no Delete commands being sent) or device-side (Delete commands sent but not processed).

Implementation Guide

Full Procedure

01

Identify Policy Tattooing Through SyncML Analysis

Start by capturing SyncML traces to identify missing Delete commands. Open Command Prompt as administrator and run the MDM Diagnostics Tool to generate traces.

mdmdiagnosticstool.exe -out C:\temp\mdm_trace.etl

While the trace is running, force a device sync from the Intune admin center. Navigate to Devices > All devices, select your device, and click Sync. Wait for the sync to complete (usually 2-3 minutes).

Stop the trace by pressing Ctrl+C, then convert the ETL file to XML for analysis:

mdmdiagnosticstool.exe -xml C:\temp\mdm_trace.etl

Open the generated XML file and search for your policy's URI. Look for Add, Replace, or Get commands but note any missing Delete commands for settings that should have been removed.

Pro tip: Use Ctrl+F to search for specific policy URIs like "./Device/Vendor/MSFT/Policy/Config/" followed by your CSP name to quickly locate relevant entries.

Verification: If tattooing exists, you'll see Add/Replace commands for policies that should be deleted, but no corresponding Delete commands in the trace.

02

Check Event Logs for Missing Delete Operations

Open Event Viewer and navigate to the MDM policy logs to confirm missing delete operations. Press Win+R, type eventvwr.msc, and press Enter.

Navigate to: Applications and Services Logs > Microsoft > Windows > DeviceManagement-Enterprise-Diagnostics-Provider > Admin

Look for Event ID 819 with the description "MDM PolicyManager: Delete Policy". The absence of these events for your removed policies confirms tattooing.

# PowerShell command to search for Event ID 819
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin'; ID=819} -MaxEvents 50 | Format-Table TimeCreated, Id, LevelDisplayName, Message -Wrap

Also check for Event ID 818 (Add Policy) and 820 (Replace Policy) to see what operations are occurring versus what should be happening.

Warning: If you see Add/Replace events but no Delete events for removed policies, this confirms the tattooing issue is affecting your tenant.

Verification: Run the PowerShell command above. Missing Event ID 819 entries for your removed policies indicates the Delete commands aren't reaching the device.

03

Examine Registry for Persistent Policy Keys

Check the Windows registry to identify which policies are still enforced despite being removed from Intune. Open Registry Editor as administrator by pressing Win+R, typing regedit, and pressing Enter.

Navigate to the main policy locations:

HKEY_LOCAL_MACHINE\Software\Microsoft\PolicyManager\current\device\[CSP_Name]
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\[Application_Name]

For example, to check Edge policies that should have been removed:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge

Document any keys that exist for policies you've removed from Intune. Take screenshots or export the registry keys for comparison after remediation:

# Export registry key to file for comparison
reg export "HKLM\Software\Policies\Microsoft\Edge" C:\temp\edge_policies_before.reg

Also check the PolicyManager location for CSP-specific settings:

HKEY_LOCAL_MACHINE\Software\Microsoft\PolicyManager\current\device\settings
Pro tip: Use the Registry Editor's search function (Ctrl+F) to find specific policy names across the entire registry if you're unsure of their exact location.

Verification: Document all persistent registry keys. These should disappear after successful remediation.

04

Identify Invalid Assignment Filters in Intune

Log into the Microsoft Intune admin center and check for invalid assignment filters that may be blocking the deletion pipeline. Navigate to Tenant administration > Filters to review all existing filters.

Next, examine each configuration profile that previously had the tattooed settings. Go to Devices > Configuration profiles and select each relevant profile.

Click on Assignments for each profile and look for any filters that show as "Invalid" or reference deleted filter names. This is a common cause of tenant-wide tattooing issues.

# PowerShell script to check assignment filters via Graph API
$tenantId = "your-tenant-id"
$clientId = "your-app-id"
$clientSecret = "your-secret"

# Get access token
$body = @{
    grant_type = "client_credentials"
    client_id = $clientId
    client_secret = $clientSecret
    scope = "https://graph.microsoft.com/.default"
}

$tokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Method Post -Body $body
$headers = @{Authorization = "Bearer $($tokenResponse.access_token)"}

# Get all device configuration profiles
$profiles = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations" -Headers $headers

# Check assignments for each profile
foreach ($profile in $profiles.value) {
    $assignments = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations/$($profile.id)/assignments" -Headers $headers
    Write-Host "Profile: $($profile.displayName)"
    foreach ($assignment in $assignments.value) {
        if ($assignment.target.deviceAndAppManagementAssignmentFilterId) {
            Write-Host "  Filter ID: $($assignment.target.deviceAndAppManagementAssignmentFilterId)"
        }
    }
}

Look for profiles that reference non-existent filter IDs or show assignment errors in the admin center.

Warning: Invalid assignment filters can block ALL policy deletions across your entire tenant, not just the specific policy with the invalid filter.

Verification: All assignment filters should show as valid in the Intune admin center. Any "Invalid" or missing filter references need immediate attention.

05

Fix Invalid Assignment Filters

Resolve invalid assignment filters to restore the deletion pipeline. In the Intune admin center, navigate to the configuration profile with the invalid filter assignment.

Click on Assignments, then click Edit next to the assignment group that has the invalid filter. In the filter dropdown, select a valid existing filter or choose (None) to remove the filter requirement.

Click Review + save to apply the changes. This should immediately restore the ability for Intune to send Delete commands to devices.

If you need to create a new filter to replace the invalid one:

  1. Go to Tenant administration > Filters
  2. Click Create and select Managed devices
  3. Provide a name and description
  4. Build your filter rule using the rule builder
  5. Click Create

Return to your configuration profile assignments and select the new filter. Here's a PowerShell example to update assignments via Graph API:

# Update assignment filter for a configuration profile
$profileId = "your-profile-id"
$assignmentId = "your-assignment-id"
$newFilterId = "your-new-filter-id"

$updateBody = @{
    target = @{
        "@odata.type" = "#microsoft.graph.groupAssignmentTarget"
        groupId = "your-group-id"
        deviceAndAppManagementAssignmentFilterId = $newFilterId
        deviceAndAppManagementAssignmentFilterType = "include"
    }
} | ConvertTo-Json -Depth 3

Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations/$profileId/assignments/$assignmentId" -Method Patch -Body $updateBody -Headers $headers -ContentType "application/json"
Pro tip: After fixing invalid filters, the deletion pipeline typically resumes within 15-30 minutes. You don't need to wait for the next sync cycle.

Verification: Check that all assignment filters show as valid in the admin center. No "Invalid" status should remain.

06

Force Device Sync and Monitor Delete Commands

After fixing the assignment filters, force a device sync to trigger the Delete commands. In the Intune admin center, go to Devices > All devices, select your affected device, and click Sync.

While the sync is processing, start a new SyncML trace to monitor for Delete commands:

mdmdiagnosticstool.exe -out C:\temp\mdm_trace_after_fix.etl

Wait for the sync to complete (usually 2-3 minutes), then stop the trace and convert to XML:

mdmdiagnosticstool.exe -xml C:\temp\mdm_trace_after_fix.etl

Open the XML file and search for Delete commands for your previously tattooed policies. You should now see entries like:

<Data Name="RequestData"><![CDATA[<Delete><CmdID>2</CmdID><Item><Target><LocURI>./Device/Vendor/MSFT/Policy/Config/YourCSP/YourSetting</LocURI></Target></Item></Delete>]]></Data>

Simultaneously monitor Event Viewer for Event ID 819 (Delete Policy) entries:

# Monitor for new delete events in real-time
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin'; ID=819; StartTime=(Get-Date).AddMinutes(-10)} | Format-Table TimeCreated, Message -Wrap
Pro tip: If Delete commands don't appear immediately, wait up to 7 hours as policy removal can be delayed. Force additional syncs every hour to accelerate the process.

Verification: Confirm Delete commands appear in SyncML traces and Event ID 819 entries are logged for your removed policies.

07

Handle CSP-Specific Tattooing Issues

Some Configuration Service Providers (CSPs) require special handling even after Delete commands are sent. For CSPs like RemovableStorageAccess or certain BitLocker settings, manual intervention may be needed.

First, identify which CSP is causing persistent tattooing by checking the registry location:

# Check for persistent CSP settings
Get-ChildItem "HKLM:\Software\Microsoft\PolicyManager\current\device" -Recurse | Where-Object {$_.Name -like "*RemovableStorage*" -or $_.Name -like "*BitLocker*"}

For RemovableStorageAccess CSP tattooing, you may need to manually set the registry value before deletion:

# Temporarily enable the setting in registry
Set-ItemProperty -Path "HKLM:\Software\Microsoft\PolicyManager\current\device\RemovableStorageAccess" -Name "RemovableStorageAccess_Deny" -Value 1

Then create a new Intune policy with the opposite setting (Enabled instead of Disabled), assign it to the device, wait for it to apply, and then delete the old policy. This forces the CSP to properly process the removal.

For stubborn policies, use the "replacement method":

  1. Create a new configuration profile with the desired end state
  2. Assign the new profile to affected devices
  3. Wait for the new profile to apply and verify it works
  4. Delete the old problematic profile
  5. After 24 hours, delete the temporary new profile if no longer needed
Warning: Never manually delete PolicyManager registry keys directly. This can cause device management issues and require re-enrollment.

Verification: Check that the specific CSP registry keys are removed after applying the workaround and that the desired policy state is achieved.

08

Verify Complete Policy Removal

Perform comprehensive verification to ensure the tattooing issue is fully resolved. Start by checking the registry locations you documented earlier:

# Compare registry state before and after
reg export "HKLM\Software\Policies\Microsoft\Edge" C:\temp\edge_policies_after.reg

# Compare the before and after files
fc C:\temp\edge_policies_before.reg C:\temp\edge_policies_after.reg

Check that the problematic registry keys are now absent:

# Verify specific policy keys are removed
$policyPaths = @(
    "HKLM:\Software\Policies\Microsoft\Edge",
    "HKLM:\Software\Microsoft\PolicyManager\current\device\settings"
)

foreach ($path in $policyPaths) {
    if (Test-Path $path) {
        Write-Host "Checking $path:"
        Get-ChildItem $path -Recurse | Select-Object Name, Property
    } else {
        Write-Host "Path $path does not exist (good - policy removed)"
    }
}

Verify that the actual policy enforcement has stopped by testing the previously enforced settings. For example, if you removed a browser policy, check that users can now access previously blocked sites or change previously locked settings.

Run a final SyncML trace to confirm ongoing Delete commands are not being sent (indicating the policy is fully removed):

mdmdiagnosticstool.exe -out C:\temp\final_verification.etl

After capturing a sync cycle, convert and check that no Add/Replace commands exist for your removed policies.

Pro tip: Document your successful remediation steps and registry locations for future reference. Policy tattooing can recur if similar assignment filter issues arise.

Verification: Removed policy registry keys should be absent, policy enforcement should be lifted, and no ongoing SyncML commands should reference the deleted policies.

Frequently Asked Questions

What is Intune policy tattooing and how do I know if my devices are affected?+
Intune policy tattooing occurs when deleted or unassigned configuration policies continue to enforce their settings on devices. You can identify this by checking if removed policies still appear in the Windows registry under HKLM\Software\Policies or HKLM\Software\Microsoft\PolicyManager, and by looking for missing Event ID 819 (Delete Policy) entries in the Windows event logs. SyncML traces will show Add/Replace commands but no corresponding Delete commands for removed policies.
Why do invalid assignment filters cause policy tattooing across my entire tenant?+
Invalid assignment filters block the deletion pipeline at the tenant level because Intune's backend systems cannot process policy removals when they reference non-existent or corrupted filters. This creates a cascading effect where all policy deletions are suspended, not just the policies with invalid filters. The issue persists until all invalid filter references are corrected by reassigning valid filters or removing filter assignments entirely.
Which Windows versions and CSPs are most affected by policy tattooing?+
Windows 10 builds prior to 1903 are most susceptible to policy tattooing. Modern Windows versions (1903+) use Policy CSP refresh mechanisms that reduce tattooing, but certain CSPs like RemovableStorageAccess, BitLocker-related settings, and some security policies can still exhibit tattooing behavior. The issue varies by CSP implementation, with some properly removing settings and others retaining them even after Delete commands are processed.
How long should I wait for policy removal after fixing assignment filter issues?+
After correcting invalid assignment filters, the deletion pipeline typically resumes within 15-30 minutes. However, actual policy removal on devices can take up to 7 hours due to sync delays and processing queues. You can accelerate this by forcing device syncs every hour through the Intune admin center. Monitor SyncML traces and Event ID 819 logs to confirm Delete commands are being sent and processed.
What should I do if Delete commands are sent but policies still persist on devices?+
If SyncML traces show Delete commands and Event ID 819 entries appear but policies persist, this indicates CSP-specific tattooing. Use the replacement method: create a new profile with opposite settings, apply it to devices, verify it works, then delete both the old and new profiles. For stubborn CSPs, you may need to manually adjust registry values before applying the replacement policy. Never directly delete PolicyManager registry keys as this can break device management.

Discussion

Share your thoughts and insights

Sign in to join the discussion