15/11/2024

Récupérer la liste des membres d’un groupe AD

I. Présentation

Dans le précédent chapitre où nous avons vu comment ajouter et retirer des membres d’un groupe Active Directory, j’ai rapidement évoqué le cmdlet « Get-ADGroupMember ». Ce dernier sert à récupérer les membres d’un groupe, comme son nom l’indique.

Dans ce chapitre, nous allons revenir sur ce cmdlet afin qu’il soit maîtrisé.

II. Utiliser « Get-ADGroupMember »

Ce cmdlet s’utilise assez simplement puisqu’il suffit de préciser le nom d’un groupe pour lequel on souhaite récupérer les membres. Par exemple, pour récupérer les membres du groupe « Admins du domaine » :

Get-ADGroupMember -Identity "Admins du domaine"

Si l’on veut un résultat plus lisible, ce qui peut être pratique pour un audit rapide des membres de ce groupe avec notamment l’OU dans laquelle ils se situent :

Get-ADGroupMember -Identity "Admins du domaine" | Format-Table Name, DistinguishedName

Il ne reste plus qu’à regarder si ces membres sont légitimes ?

Note : pour rappel, le paramètre -Identity accepte différentes valeurs. En effet, nous pouvons préciser un GUID (objectGUID), un SID (objectSID), un identifiant/login (sAMAccountName) ou encore un DN (DistinguishedName).

III. Utiliser « Get-ADPrincipalGroupMembership »

Nous avons vu comment récupérer les membres d’un groupe, mais pour récupérer la liste des groupes dont est membre un utilisateur, un groupe ou un ordinateur, nous pouvons utiliser le cmdlet « Get-ADPrincipalGroupMembership ».

C’est une approche différente, mais qui peut s’avérer pratique. Nous avons pu voir dans le chapitre précédent que la propriété MemberOf est récupérable aussi directement via le cmdlet Get-ADUser.

Pour récupérer la liste des groupes dont est membre le groupe « Admins du domaine » lui-même, voici la commande :

Get-ADPrincipalGroupMembership -Identity "Admins du domaine"

IV.  Compter le nombre de membres dans un groupe

Pour compter le nombre de membres au sein d’un groupe, nous allons utiliser count, comme ceci :

(Get-ADGroupMember -Identity "Admins du domaine").Count

Cette commande retournera tout simplement le nombre de membres, avec un chiffre, sans texte. Cette valeur est récupérable facilement dans une variable.

À la suite de ça, nous pouvons récupérer la liste des groupes qui ont plus de X membres.

Voici comment réaliser cette requête :

$GroupList = Get-ADGroup -Filter *

Foreach($Group in $GroupList){

    $GroupMemberCount = (Get-ADGroupMember -Identity $($Group.Name)).Count

    if($GroupMemberCount -gt 5){
        Write-Warning "Le groupe '$($Group.Name)' a $GroupMemberCount membres !"
    }
}

La sortie sera sous cette forme :

V. Récupérer la liste des groupes vides

Lorsqu’il s’agit de faire du nettoyage dans l’annuaire Active Directory, il est pertinent de rechercher les groupes vides. Un groupe vide est un groupe inutile.

Une simple requête sur la base du cmdlet Get-ADGroup va permettre de retourner le nom de ces groupes :

Get-ADGroup -Filter * -Properties Members | Where-Object { -not $_.members} | Select-Object Name

Vous pouvez compléter le Select-Object pour ajouter éventuellement des propriétés supplémentaires, comme le DistinguishedName.

VI. La notion de rechercher récursive

Pour finir ce chapitre, je vais m’intéresser au paramètre -Recursive du cmdlet « Get-ADGroupMember ». En fait, il est intéressant si vous avez des « nested groups » : c’est-à-dire des groupes dans des groupes.

Grâce à lui, plutôt que d’afficher que le « Groupe1 » est membre du « Groupe2 » il va directement vous afficher les membres du « Groupe1 ». Cela est plus significatif, mais aussi plus gourmand en ressources.

Voici un exemple :

Get-ADGroupMember -Identity "Admins du domaine" -Recursive

Il y a seulement le paramètre à ajouter à la commande, PowerShell s’occupe du reste ?

Ce chapitre se termine, vous êtes désormais en mesure de récupérer la liste des membres d’un groupe et la liste des groupes dont un utilisateur est membre (ou un ordinateur, ou un groupe).

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail