Dans Microsoft 365, les groupes sont partout. Chaque équipe Teams, chaque site SharePoint moderne, chaque plan Planner repose sur un Microsoft 365 Group. C’est une brique fondamentale de la collaboration moderne.
Mais comme toute structure vivante, un tenant évolue. Des projets se terminent, des équipes changent, des utilisateurs quittent l’organisation. Et progressivement, certains groupes se retrouvent dans des situations problématiques sans que personne ne s’en rende compte.
Parmi les cas les plus fréquents, on retrouve les groupes sans propriétaire et les groupes sans membre. À première vue, cela peut sembler anodin. En réalité, ce sont deux signaux forts de dérive de gouvernance.
Un groupe sans propriétaire est une bombe à retardement. Plus personne ne peut gérer les membres, modifier les paramètres ou assumer la responsabilité du contenu. Si un problème survient, l’IT devient le seul recours. Dans un environnement contenant des centaines ou des milliers de groupes, ce scénario n’est pas hypothétique. Il finit toujours par arriver.
À l’inverse, un groupe sans membre peut indiquer un projet abandonné ou une équipe supprimée sans nettoyage. Ces groupes “fantômes” continuent d’exister, parfois avec du contenu stocké, des permissions configurées, ou des liens partagés. Ils augmentent la complexité du tenant et compliquent les audits.
La bonne nouvelle, c’est qu’il n’est pas nécessaire d’attendre qu’un audit externe ou un incident révèle ces situations. On peut les détecter automatiquement.
Avec Microsoft Graph PowerShell, il est possible de parcourir l’ensemble des groupes Microsoft 365 et d’identifier ceux qui n’ont plus de propriétaire ou plus de membre actif.
Voici une logique simple qui permet de repérer ces cas :
Connect-MgGraph -Scopes "Group.Read.All"
$groups = Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All
foreach ($group in $groups) {
$owners = Get-MgGroupOwner -GroupId $group.Id -All
$members = Get-MgGroupMember -GroupId $group.Id -All
if ($owners.Count -eq 0 -or $members.Count -eq 0) {
[pscustomobject]@{
GroupName = $group.DisplayName
GroupId = $group.Id
OwnerCount = $owners.Count
MemberCount = $members.Count
}
}
}
Ce script ne fait rien de spectaculaire. Il rend simplement visible ce qui passe habituellement inaperçu. Et c’est précisément sa force.
Exécuté ponctuellement, il permet d’obtenir une photographie rapide de l’état de santé du tenant. Exécuté régulièrement, il devient un véritable mécanisme de gouvernance continue.
L’objectif n’est pas de supprimer massivement les groupes identifiés. Il est d’initier une action structurée. Dans certains cas, il suffira d’ajouter un propriétaire métier. Dans d’autres, une notification pourra être envoyée avant suppression. Parfois, le groupe devra être archivé ou nettoyé.
Ce qui est important, c’est que la décision soit intentionnelle. Pas accidentelle.
Dans une stratégie de gouvernance mature, ce type de contrôle simple a un impact réel. Il réduit la dette structurelle, améliore la résilience organisationnelle et simplifie les audits futurs.
Les groupes orphelins ou vides ne sont pas une exception rare. Ils sont inévitables dans un environnement collaboratif dynamique. La différence entre un tenant maîtrisé et un tenant chaotique tient souvent à ce genre de détail.
Automatiser leur détection n’est pas une mesure spectaculaire. C’est une mesure intelligente.
