Deduplicate Chrome ADMX policies for clean Intune uploads across multiple Chrome versions.
Warning
Microsoft Intune allows administrators to upload ADMX files to manage Group Policy settings on enrolled devices. However, it has critical limitations when dealing with multiple versions of the same ADMX template:
| ❌ Limitation | Description |
|---|---|
| Duplicate rejection | Intune blocks uploading an ADMX file with the same namespace, even if it's from a different Chrome version |
| Policy duplication | Renaming the file to bypass the check results in the same policies appearing multiple times in the Settings Catalog — once per imported ADMX |
| No built-in versioning | Google ships every Chrome ADMX with all policies included, with no mechanism to import only what's new |
For organizations managing Chrome across thousands of endpoints, this means:
- 🚫 Unable to adopt new Chrome policies without removing old ADMX imports first
- 📑 Cluttered Settings Catalog with hundreds of duplicate policy entries
⚠️ Risk of misconfiguration when admins can't tell which policy instance is active- 🕐 Manual effort to compare XML files across versions
ADMxSquizer ("ADMX Squeezer") solves this by generating delta ADMX/ADML files that contain only the new policies added between two Chrome versions.
Each output file has a unique versioned namespace (Google.Policies.Chrome.v146), so Intune treats them as distinct policy definitions — no conflicts, no duplicates.
Chrome v141 (690 policies) ─┐
├──► Delta v143 (4 new policies)
Chrome v143 (694 policies) ─┤
├──► Delta v146 (25 new policies)
Chrome v146 (719 policies) ─┘
- PowerShell 5.1+ (included in Windows 10/11)
- Chrome ADMX templates downloaded from Google Enterprise
.\Compare-ADMXPolicies.ps1 `
-BaselineAdmxPath ".\GoogleChromeADMx\policy_templates_141\windows\admx\chrome.admx" `
-NewerAdmxPath ".\GoogleChromeADMx\policy_templates_146\windows\admx\chrome.admx" `
-OutputFolder ".\IntuneADMX" `
-BaselineVersion "141" `
-NewerVersion "146"IntuneADMX/
└── chrome_v146_delta_from_v141/
├── chrome_v146_delta_from_v141.admx ← Upload this to Intune
├── en-US/
│ └── chrome_v146_delta_from_v141.adml
├── it-IT/
│ └── chrome_v146_delta_from_v141.adml
└── ... (18 languages)
| Parameter | Description | Example |
|---|---|---|
BaselineAdmxPath |
Path to the older chrome.admx | .\policy_templates_141\...\chrome.admx |
NewerAdmxPath |
Path to the newer chrome.admx | .\policy_templates_146\...\chrome.admx |
OutputFolder |
Where to write the delta files | .\IntuneADMX |
BaselineVersion |
Short label for the baseline | 141 |
NewerVersion |
Short label for the newer version | 146 |
- Parse both ADMX files as XML
- Compare policy
nameattributes to identify additions - Resolve all dependencies — categories, string IDs, presentation elements
- Generate a new ADMX with a versioned namespace (
Google.Policies.Chrome.v{version}) - Generate matching ADML files for each language (intersection of both versions)
- Validate output is well-formed XML
| Feature | Details |
|---|---|
| 🏷️ Versioned namespace | Google.Policies.Chrome.v146 prevents conflicts with other imports |
| 📄 Versioned filename | chrome_v146_delta_from_v141.admx makes the scope clear |
| 🌐 Multi-language ADML | All 18 languages supported by Chrome Enterprise |
| ✂️ Minimal footprint | Only new policies + their dependencies |
With Chrome versions 141, 143, and 146:
| Comparison | New Policies | Example Policies |
|---|---|---|
| 141 → 143 | 4 | GeminiActOnWebSettings, LocalNetworkAccessRestrictionsTemporaryOptOut |
| 143 → 146 | 25 | GeolocationBlockedForUrls, XSLTEnabled, CacheEncryptionEnabled |
| 141 → 146 | 29 | All of the above combined |
✅ Consistency verified: 4 + 25 = 29
ADMxSquizer/
├── Compare-ADMXPolicies.ps1 # Main PowerShell script
├── GoogleChromeADMx/ # Source Chrome ADMX templates
│ ├── policy_templates_141/
│ ├── policy_templates_143/
│ └── policy_templates_146/
├── IntuneADMX/ # Generated delta output
│ ├── chrome_v143_delta_from_v141/
│ ├── chrome_v146_delta_from_v143/
│ └── chrome_v146_delta_from_v141/
└── .github/
└── copilot-instructions.md
- Download the new ADMX templates from Google Enterprise
- Extract to
GoogleChromeADMx/policy_templates_{version}/ - Run the script against the previous version:
.\Compare-ADMXPolicies.ps1 `
-BaselineAdmxPath ".\GoogleChromeADMx\policy_templates_146\windows\admx\chrome.admx" `
-NewerAdmxPath ".\GoogleChromeADMx\policy_templates_149\windows\admx\chrome.admx" `
-OutputFolder ".\IntuneADMX" `
-BaselineVersion "146" `
-NewerVersion "149"- Upload the generated ADMX/ADML to Intune
- Go to Microsoft Intune admin center → Devices → Configuration → Import ADMX
- Upload the
.admxfile from the delta folder - Upload the
.admlfile from theen-USsubfolder (or your preferred language) - The new policies will appear in the Settings Catalog without duplicating existing ones
Contributions are welcome! Feel free to open issues or submit pull requests.
This project is licensed under the MIT License.
This project is not affiliated with, endorsed by, or supported by Google or Microsoft. Google Chrome™ is a trademark of Google LLC. Microsoft Intune™ is a trademark of Microsoft Corporation. The ADMX/ADML files included in this repository are derived from publicly available Google Chrome Enterprise policy templates. This tool modifies those files to work around a known Intune limitation — it is provided "as-is" without any guarantee of compatibility with current or future versions of Intune or Chrome Enterprise policy templates.