Pour beaucoup d'organisations, les Group Policy Objects (GPO) restent la colonne vertébrale de la configuration Windows. Mais dès que les postes rejoignent Azure — ou plutôt Microsoft Entra ID — sans domaine Active Directory local, les GPO ne s'appliquent plus. Ce guide s'adresse aux administrateurs systèmes et ingénieurs cloud qui doivent piloter cette transition en production, avec une méthode reproductible et des outils concrets.
Trois scénarios, trois chemins distincts
La première erreur est de traiter la migration GPO → Intune comme un projet unique et uniforme. Microsoft Intune est conçu pour gérer des appareils qu'ils soient sur le réseau d'entreprise ou non, là où les GPO supposent un appareil joint au domaine et joignable par un contrôleur de domaine. Le point de départ logique est donc de segmenter votre parc par type de jonction.
Scénario 1 — Appareils cloud-natifs (Microsoft Entra joined)
Pour tout nouvel appareil Microsoft Entra joined (anciennement Azure AD joined), partez d'une ardoise vierge. Construisez une configuration cloud-first plutôt que de reproduire l'historique GPO. La séquence recommandée :
- Appliquer les security baselines Microsoft Intune comme socle.
- Ajouter les paramètres métier validés (OneDrive Known Folder Move, Microsoft Edge, chiffrement BitLocker).
- Ne pas reproduire les paramètres hérités sans en valider la pertinence actuelle.
Scénario 2 — Transition sélective de paramètres existants
Si certains comportements doivent être préservés (contraintes réglementaires, logiciels métier), évaluez et rationalisez les GPO existantes, puis ne recréez dans Intune que les paramètres réellement nécessaires et supportés. Il s'agit d'un replatforming délibéré, pas d'un clonage.
Scénario 3 — Coexistence GPO + Intune (hybride)
Les appareils Hybrid Microsoft Entra joined peuvent recevoir simultanément des paramètres GPO et Intune — c'est le cas typique des environnements co-gérés avec Windows Autopatch ou co-management ConfigMgr. Cette coexistence peut durer longtemps, mais elle exige une coordination rigoureuse des ciblages pour éviter les conflits.

Évaluer et rationaliser avant de toucher à quoi que ce soit
Le piège classique est de se précipiter dans Intune avec les GPO existantes sans en questionner la pertinence. La plupart des environnements matures accumulent des GPO obsolètes, dupliquées, non documentées, ou appliquées à des OU trop larges. Migrer cette dette technique vers Intune, c'est la perpétuer.
Actions d'audit Ă mener avant la transition
- Exporter toutes les GPO depuis la Group Policy Management Console (GPMC) au format XML.
- Exécuter
Gpresultsur des postes représentatifs pour identifier les GPO réellement appliquées. - Supprimer ou archiver les GPO inutilisées, redondantes ou héritées avant toute décision de transition.
- Catégoriser les paramètres requis : sécurité, gestion des mises à jour, restrictions d'appareils, contrôle d'applications, dépendances legacy.
- Documenter les populations d'appareils et les exigences métier associées à chaque politique.
Le script suivant génère un rapport HTML de toutes les GPO du domaine via GPMC :
1# Prérequis : module GroupPolicy (installé avec les RSAT sur Windows)2# Rôle minimum : lecture sur tous les GPO du domaine3# Sortie : fichier HTML par GPO dans C:\GPO_Export4 5Import-Module GroupPolicy6 7$OutputPath = "C:\GPO_Export"8New-Item -ItemType Directory -Path $OutputPath -Force | Out-Null9 10$Domain = (Get-ADDomain).DNSRoot11$AllGPOs = Get-GPO -All -Domain $Domain12 13foreach ($GPO in $AllGPOs) {14 $SafeName = $GPO.DisplayName -replace '[\\/:*?"<>|]', '_'15 $ReportPath = Join-Path $OutputPath "$SafeName.html"16 Get-GPOReport -Guid $GPO.Id -ReportType HTML -Path $ReportPath -Domain $Domain17 Write-Host "Exporté : $($GPO.DisplayName) -> $ReportPath"18}19 20Write-Host "Export terminé. $($AllGPOs.Count) GPO(s) exportée(s) dans $OutputPath"Pour identifier les GPO qui ne s'appliquent à aucun objet (WMI filter échouant, sécurité trop restrictive, OU vide) :
1# Sortie : liste des GPO sans lien actif ou avec 0 objets ciblés2$Domain = (Get-ADDomain).DNSRoot3$AllGPOs = Get-GPO -All -Domain $Domain4 5foreach ($GPO in $AllGPOs) {6 $Links = (Get-GPOReport -Guid $GPO.Id -ReportType Xml -Domain $Domain) -as [xml]7 $LinkCount = ($Links.GPO.LinksTo | Measure-Object).Count8 if ($LinkCount -eq 0) {9 Write-Output "[SANS LIEN] $($GPO.DisplayName) | Créée : $($GPO.CreationTime) | Modifiée : $($GPO.ModificationTime)"10 }11}Group Policy Analytics : un outil d'aide à la décision, pas une baguette magique
Group Policy Analytics est intégré nativement à Microsoft Intune (accessible depuis Appareils > Configuration > Group Policy Analytics). Il importe vos GPO exportées au format XML et génère un rapport de correspondance avec le Settings Catalog de Intune (MDM).
Limite importante
Les correspondances de Group Policy Analytics reflètent l'état du mapping au moment de la dernière mise à jour de l'outil. Des paramètres ajoutés récemment au Settings Catalog peuvent ne pas apparaître comme supportés alors qu'ils le sont. Validez toujours les paramètres critiques directement dans la documentation Microsoft Learn.
Ce que l'outil produit concrètement
- Liste des paramètres GPO disposant d'un équivalent MDM documenté.
- Mise en évidence des paramètres obsolètes ou inadaptés à un contexte cloud-natif.
- Identification des GPO candidates Ă la retraite plutĂ´t qu'Ă la migration.
- Base de travail pour la discussion avec les équipes sécurité et métier.
Utilisez ce rapport comme une source d'entrée parmi d'autres, en complément de votre audit manuel et de la validation sur des appareils pilotes.
Reconstruire, pas copier : la logique cloud-first
Une migration GPO → Intune réussie n'est pas une transposition ligne à ligne. Pour chaque paramètre ou groupe de paramètres identifié lors de l'audit, appliquez la grille de décision suivante :
| Situation | Action recommandée | Outil Intune |
|---|---|---|
| Paramètre obsolète ou non requis | Retirer | N/A |
| Paramètre supporté et nécessaire | Recréer dans Intune | Settings Catalog |
| Dépendance legacy (lecteur réseau, imprimante) | Redéfinir en solution cloud | OneDrive, Universal Print |
| Paramètre ADMX tiers supporté | Importer le modèle ADMX | Administrative Templates |
| Aucun équivalent MDM disponible | Conserver en GPO (hybride) ou scripter | Remediations / Scripts |

Partir des security baselines comme socle
Les security baselines dans Intune sont des collections de paramètres recommandés par Microsoft pour Windows, Microsoft Edge et Microsoft Defender for Endpoint. Elles constituent le point de départ le plus cohérent pour remplacer les GPO de sécurité.
Bonne pratique
N'appliquez pas une security baseline sans l'avoir revue avec vos équipes sécurité. Certains paramètres peuvent bloquer des flux métier existants ou entrer en conflit avec des configurations tierces.
Séquence de déploiement recommandée :
- Identifier les chevauchements avec les GPO existantes avant tout déploiement.
- Piloter sur un groupe représentatif (IT + utilisateurs métier volontaires).
- Monitorer les rapports de conflits dans Intune (
Appareils > Surveiller > Conflits de stratégie). - Compléter avec des profils de configuration uniquement pour les exigences documentées non couvertes par la baseline.
Mise en œuvre
Prérequis
- Module :
Microsoft.Graph.DeviceManagement(SDK Microsoft Graph PowerShell) - Installation :
Install-Module Microsoft.Graph -Scope CurrentUser - Permission minimum :
DeviceManagementConfiguration.ReadWrite.All - Rôle Intune minimum : Administrateur de stratégie et de profil Intune
Le script ci-dessous importe un fichier XML de GPO exporté depuis GPMC vers Group Policy Analytics dans Intune, puis récupère le rapport de compatibilité :
1# Connexion à Microsoft Graph avec le scope requis2Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All" -NoWelcome3 4# Chemin du fichier XML exporté depuis GPMC5$GPOXmlPath = "C:\GPO_Export\MonGPO.xml"6 7if (-not (Test-Path $GPOXmlPath)) {8 Write-Error "Fichier XML introuvable : $GPOXmlPath"9 exit 110}11 12# Lecture et encodage du fichier XML en Base64 (format attendu par l'API)13$GPOContent = Get-Content -Path $GPOXmlPath -Raw -Encoding UTF814$GPOBase64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($GPOContent))15 16# Construction du body de la requête17$Body = @{18 displayName = [System.IO.Path]::GetFileNameWithoutExtension($GPOXmlPath)19 groupPolicyObjectFile = @{20 ouDistinguishedName = ""21 content = $GPOBase6422 }23} | ConvertTo-Json -Depth 524 25# Upload vers Group Policy Analytics26$UploadUri = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyMigrationReports/createMigrationReport"27$Response = Invoke-MgGraphRequest -Method POST -Uri $UploadUri -Body $Body -ContentType "application/json"28 29Write-Host "Import lancé. ID du rapport : $($Response.id)"30 31# Attendre la génération du rapport (délai typique : 30 à 90 secondes)32Start-Sleep -Seconds 6033 34# Récupérer le rapport de migration35$ReportUri = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyMigrationReports"36$MigReports = Invoke-MgGraphRequest -Method GET -Uri $ReportUri37$LatestReport = $MigReports.value | Sort-Object createdDateTime -Descending | Select-Object -First 138 39Write-Host "Rapport : $($LatestReport.displayName)"40Write-Host "Paramètres migrables : $($LatestReport.migrationReadiness)"Pour lister les profils de configuration existants dans Intune et vérifier les conflits :
1# Récupère tous les profils de configuration et leur état de déploiement2$ProfilesUri = "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations"3$Profiles = Invoke-MgGraphRequest -Method GET -Uri $ProfilesUri4 5$Profiles.value | ForEach-Object {6 $Profile = $_7 $AssignUri = "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations/$($Profile.id)/deviceStatuses"8 $Statuses = Invoke-MgGraphRequest -Method GET -Uri $AssignUri9 $ConflictCount = ($Statuses.value | Where-Object { $_.status -eq 'conflict' }).Count10 11 [PSCustomObject]@{12 Nom = $Profile.displayName13 Type = $Profile.'@odata.type'14 Conflits = $ConflictCount15 DerniereModif = $Profile.lastModifiedDateTime16 }17} | Format-Table -AutoSizeCoordonner GPO et Intune pendant la période hybride
Un point souvent mal compris : GPOWinsOverMDM n'est pas un interrupteur universel de priorité. Ce paramètre (défini via le CSP MDMWinsOverGP ou son inverse) ne s'applique qu'aux paramètres exposés par le Windows Policy CSP avec un mapping Group Policy correspondant. Il ne gouverne pas les paramètres délivrés via d'autres CSP comme Defender ou Windows Update — qui ont leurs propres comportements de précédence ou de fusion.
Risque de configuration imprévisible
Utiliser GPOWinsOverMDM comme stratégie de coexistence générale produit des résultats inconsistants et difficiles à déboguer. La meilleure approche est d'éviter de configurer le même paramètre depuis les deux plans de gestion simultanément.
Stratégie de ciblage pour éviter les conflits
Côté Group Policy :
- Utiliser le filtrage par groupe de sécurité pour exclure les appareils pilotes Intune des GPO concernées.
- Valider avec des filtres WMI si nécessaire (avec prudence — ils impactent les performances de traitement des GPO).
- Documenter chaque GPO avec son propriétaire, sa population cible et sa date de révision prévue.
Côté Intune :
- Cibler via des groupes Microsoft Entra dynamiques (ex. :
device.managementType -eq "MDM"). - Utiliser les assignment filters pour un ciblage granulaire sans multiplier les groupes.
- Documenter le plan de gestion autoritaire pour chaque zone de politique (sécurité, mises à jour, restrictions).
Exemple concret : laisser les GPO Windows Update en place pour la majorité des appareils hybrides, exclure un groupe pilote de cette GPO, et lui assigner le profil Intune équivalent. Après validation, élargir le périmètre progressivement.
Retirer les GPO progressivement : la checklist de décommissionnement
Opération irréversible
Ne supprimez jamais une GPO sans l'avoir préalablement désactivée et archivée. Une suppression accidentelle d'une GPO appliquée à des milliers de postes peut avoir un impact immédiat sur la production.
Pour chaque GPO Ă retirer :
- Exclure la population pilote de la GPO et lui assigner la configuration Intune équivalente.
- Vérifier la configuration effective avec
Gpresult /H rapport.html /Fet les rapports de déploiement Intune. - Étendre le ciblage par étapes contrôlées (10 % → 30 % → 100 %).
- Désactiver la GPO (ne pas la supprimer) après validation complète.
- Archiver le fichier XML exporté avant suppression définitive.
- Conserver les GPO encore nécessaires pour les appareils hybrides avec un propriétaire identifié et une date de révision planifiée.
1# Désactivation d'une GPO (opération réversible, recommandée avant suppression)2# Rôle minimum : Group Policy Creator Owner ou Domain Admin3# Module : GroupPolicy (RSAT)4 5$GPOName = "Nom-de-votre-GPO"6 7# Vérification préalable8$GPO = Get-GPO -Name $GPOName -ErrorAction Stop9Write-Host "GPO trouvée : $($GPO.DisplayName) | Statut actuel : $($GPO.GpoStatus)"10 11# Désactivation des paramètres utilisateur ET ordinateur12$GPO | Set-GPO -Status AllSettingsDisabled13Write-Host "GPO '$GPOName' désactivée. Vérifiez l'impact avant suppression."14 15# Export d'archivage16$ArchivePath = "C:\GPO_Archive\$($GPOName -replace '[\\/:*?"<>|]', '_')_$(Get-Date -Format 'yyyyMMdd').xml"17Get-GPOReport -Name $GPOName -ReportType Xml -Path $ArchivePath18Write-Host "Archive XML : $ArchivePath"Dépannage des erreurs courantes
Vérifiez que le service Intune Management Extension (IME) est bien démarré sur le poste (services.msc → Microsoft Intune Management Extension). Consultez le journal %ProgramData%\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension.log. Assurez-vous que l'appareil est bien enregistré dans Intune (dsregcmd /status → MDMUrl renseigné).
Utilisez Gpresult /H rapport.html /F pour voir les GPO appliquées, et le rapport de conflits Intune (Appareils > Surveiller > Conflits de stratégie). Identifiez quel plan de gestion est autoritaire pour ce paramètre et retirez la configuration de l'autre. Ne comptez pas sur GPOWinsOverMDM pour résoudre le conflit.
Le mapping de l'outil n'est pas exhaustif et peut être en retard sur le Settings Catalog. Recherchez manuellement le paramètre dans Appareils > Configuration > Créer un profil > Settings Catalog avec les termes exacts du nom GPO. Consultez la documentation Microsoft Learn sur le Settings Catalog pour les ajouts récents.
Vérifiez que le compte utilisé dispose du rôle Intune Administrator ou d'une attribution de rôle personnalisée incluant DeviceManagementConfiguration.ReadWrite.All. Confirmez que le consentement admin a été accordé pour ce scope dans Microsoft Entra ID (Applications d'entreprise > Microsoft Graph PowerShell > Autorisations).
Ce que vous faites dès lundi matin
La migration GPO → Intune n'est pas un projet de basculement mais un processus de rationalisation progressive. Voici les premières actions concrètes :
- Lancez l'audit GPO : exportez toutes vos GPO via GPMC et exécutez le script d'identification des GPO sans lien actif.
- Importez dans Group Policy Analytics les GPO des zones les plus actives (sécurité, mises à jour) pour obtenir un premier état des lieux de compatibilité MDM.
- Identifiez votre première population cloud-native (nouveaux appareils, appareils de remplacement) et construisez leur configuration Intune sur la base des security baselines.
- Définissez un propriétaire et une zone de politique autoritaire pour chaque grande catégorie (sécurité, updates, restrictions) avant de toucher au ciblage.
- Constituez un groupe pilote d'une dizaine de postes représentatifs et validez chaque profil avant tout déploiement large.
Si votre organisation maintient des appareils hybrides pour plusieurs années encore, la coexistence GPO + Intune est une réalité opérationnelle — l'enjeu n'est pas d'en sortir vite, mais d'en sortir proprement, zone par zone, avec une documentation claire des responsabilités.



