
Source
https://mc.merill.net/message/MC1448379
Source Cette information a été reprise également dans la documentation Microsoft Learn, qui affiche désormais un avertissement.
Le 3 novembre 2026, Entra ID arrête de recalculer les règles dynamiques qui utilisent memberOf. Pas d’erreur, pas d’alerte : les groupes concernés se figent. Voici le script PowerShell que j’utilise pour les recenser, voir ce qu’ils alimentent et préparer leur remplacement, sans rien modifier dans le tenant.
Ce qui change
L’opérateur memberOf construit un groupe dynamique à partir des membres d’autres groupes :
user.memberof -any (group.objectId -in ['3f1c...'])
Resté en préversion, il ralentit le calcul de tous les groupes dynamiques du tenant. Microsoft y met fin le 3 novembre 2026 (MC1448379) pour les groupes dynamiques, les unités administratives dynamiques et les affectations automatiques d’Entitlement Management.
Le vrai risque
Rien n’est supprimé : les membres restent figés au dernier calcul. Les arrivants n’obtiennent pas leurs accès, les partants gardent les leurs, et personne n’est prévenu.
Trouver les règles prend une ligne de PowerShell. Le travail, c’est de savoir ce que chaque groupe alimente pour corriger dans le bon ordre.
Où un groupe est-il utilisé ?
Pour chaque groupe ou unité administrative concerné, le script liste tous ses usages. La couleur de chaque ligne est celle qu’on retrouve dans le rapport.
| Usage | Ce qui est remonté | Criticité |
|---|---|---|
| Licences | Licences attribuées par le groupe | Critique |
| Accès conditionnel | Stratégies où le groupe est inclus ou exclu, avec leur état | Critique |
| Rôles Entra | Rôles actifs ou éligibles PIM, administrateurs délégués sur une AU | Critique |
| MFA | Méthodes d’authentification et campagne d’inscription | Critique |
| Intune | Profils, conformité, sécurité, scripts, applications, Autopilot, mises à jour, MAM | Élevée |
| Applications | Applications d’entreprise affectées au groupe | Élevée |
| Teams | Équipe du groupe, avec son lien | Élevée |
| SharePoint | Site du groupe, avec son adresse | Élevée |
| Exchange | Boîte aux lettres et calendrier du groupe | Moyenne |
| Règles chaînées | Autres groupes dynamiques construits sur celui-ci | Élevée |
| Packages d’accès | Ressources distribuées, demandeurs, approbateurs | Élevée |
| Autres | Accès B2B, imbrication de groupes, revues d’accès | Moyenne |
Comment travaille le script
- InventaireGroupes, unités administratives et stratégies EM dont la règle contient memberOf.
- SourcesGroupes cités dans chaque règle : issus de l’AD ou du cloud, dynamiques ou non.
- UsagesTout ce que chaque objet alimente, classé par criticité.
- RapportUn classeur Excel et une page HTML, avec une piste de remplacement par objet.
Le script n’envoie que des requêtes de lecture. S’il reçoit un jeton avec des droits d’écriture, il le signale.
Prérequis
| PowerShell | 5.1 ou 7 |
| Modules | Microsoft.Graph.Authentication et ImportExcel. Excel n’a pas besoin d’être installé. S’ils manquent, le script propose de les installer. |
| Compte | Rôle Lecteur général, activé au préalable s’il est éligible dans PIM |
| Application | Pour une tâche planifiée : inscription avec certificat et 16 permissions Graph en lecture, détaillées sur GitHub |
Lancer l’audit
Avant de se connecter, le script explique ce qu’il va faire, vérifie PowerShell, les modules et les droits, puis demande confirmation.
# Interactif
.\Invoke-EntraMemberOfAudit.ps1
# Première passe rapide, sans Intune
.\Invoke-EntraMemberOfAudit.ps1 -SkipIntune
# Tâche planifiée (application et certificat)
.\Invoke-EntraMemberOfAudit.ps1 -TenantId contoso.onmicrosoft.com `
-ClientId <AppId> -CertificateThumbprint <Empreinte> -Unattended
Ce que l’on obtient
Les captures qui suivent viennent d’un vrai tenant de production, anonymisé : 10 groupes dynamiques, dont 3 utilisent memberOf, pour 24 usages.
Le classeur Excel
| Synthèse | Chiffres clés et jours restants, à partager tel quel |
| Vue par objet | Une ligne par groupe, une colonne par usage : on voit d’un coup d’œil où il est utilisé |
| Groupes, AU, EM | Règle, membres, sources et piste de remplacement |
| Dépendances | Un usage par ligne, trié par criticité : la liste de contrôle après correction |
La page HTML
Chaque groupe y a sa fiche : son nom en étiquette, sa règle, ses sources, puis ses usages reliés chacun par un cordon de couleur. Les liens mènent directement à l’équipe Teams et au site SharePoint.
La carte montre l’ensemble : groupes sources, groupes concernés et ce qu’ils alimentent. Une stratégie d’accès conditionnel partagée par trois groupes n’apparaît qu’une fois, reliée aux trois.
Remplacer memberOf
Le plus souvent, le groupe intermédiaire ne sert à rien : on peut brancher les services directement sur les groupes sources.
| Usage | Solution sans nouveau groupe |
|---|---|
| Accès conditionnel, Intune | Cibler les groupes sources, ou les imbriquer dans un groupe assigné : ces services suivent l’imbrication |
| Licences, applications | Affecter chaque groupe source : l’imbrication n’est pas suivie, mais une personne présente dans deux groupes ne compte qu’une fois |
| Stratégies administrateurs | Condition « Rôles d’annuaire » de l’accès conditionnel, sans groupe |
Quand il faut vraiment un groupe à plat (équipe Teams, unité administrative) :
| Groupes sources | Solution |
|---|---|
| Synchronisés depuis l’AD | Une règle sur un attribut déjà renseigné (service, société, suffixe d’UPN), ou un attribut AD (extensionAttribute1 à 15) répliqué par Entra Connect |
| Dynamiques | Reprendre leurs critères dans la règle, combinés par -or |
| Assignés dans le cloud | Convertir en groupe assigné, ou passer par un package d’accès |
# Avant
user.memberof -any (group.objectId -in ['<Id GG-Siege>'])
# Après
user.extensionAttribute5 -eq "SIEGE"
Passer un groupe dynamique en groupe assigné supprime tous ses membres. Exportez la liste avant la conversion et réinjectez-la juste après, sinon licences et stratégies tombent pour tout le monde.
Dans l’ordre : traiter d’abord les objets critiques, tester chaque nouvelle règle sur un groupe de test, comparer les membres, basculer, vérifier les usages, puis relancer l’audit jusqu’à ce qu’il ne trouve plus rien.
Ce que le script ne voit pas
Microsoft Graph n’expose pas tout. À contrôler à part : droits SharePoint donnés directement à un groupe de sécurité, stratégies Teams, Purview, Defender, Exchange (règles de transport, délégations) et RBAC Azure.
Télécharger
Le script, sa documentation et son historique sont sur github.com/BouCloud/MyEntra_Audit_dynamicgroup_memberof.
Référence : Microsoft 365 Message Center MC1448379.
Commentaires récents