HOWTO · PowerShell

Obtenir l'appartenance à tous les groupes d'un utilisateur à l'aide de PowerShell

Comparez quatre façons d'afficher les appartenances aux groupes Active Directory d'un utilisateur avec PowerShell, y compris leurs prérequis et la portée de leurs résultats.

Sur cette page

Pour afficher les appartenances d’un utilisateur à Active Directory, choisissez entre la commande héritée net, ADSI, DirectorySearcher ou le module Active Directory. Les trois premières méthodes utilisent les services d’annuaire Windows sans nécessiter l’installation de ce module ; la cmdlet est l’option la plus directe lorsque le module est disponible. Ces méthodes nécessitent une connexion à un contrôleur de domaine et un compte autorisé à lire l’annuaire. Ici, « toutes » désigne les appartenances renvoyées par chaque requête : l’attribut d’annuaire memberOf et les exemples présentés indiquent des liens directs vers des groupes, sans développer l’ensemble des appartenances transitives. Ils n’incluent pas nécessairement non plus le groupe principal de l’utilisateur.

Obtenir l’appartenance d’un utilisateur à des groupes avec les commandes héritées net

Exécutez net user /domain pour demander au domaine les informations du compte connecté. Le résultat comprend ses appartenances aux groupes globaux du domaine. Pour interroger un autre compte du domaine, indiquez son nom d’utilisateur avec net user username /domain.

Il s’agit d’un ancien outil en ligne de commande que PowerShell peut appeler directement ; ce n’est pas un alias PowerShell. Sa sortie est mise en forme pour l’affichage. Si vous avez besoin d’objets structurés ou souhaitez traiter les noms de groupes dans un script, utilisez plutôt une requête Active Directory. Cette commande renvoie des informations sur le domaine, et non les appartenances de l’utilisateur aux groupes locaux de l’ordinateur.

Obtenir l’appartenance d’un utilisateur à des groupes avec ADSI

ADSI est une interface Windows pour les services d’annuaire, accessible depuis PowerShell au moyen du type [adsisearcher]. Cette requête utilise le nom du compte connecté et renvoie ses valeurs memberOf sous forme de noms distinctifs. Dans une session PowerShell connectée à un domaine, exécutez $searcher = [adsisearcher]"(samAccountName=$($env:USERNAME))"; $result = $searcher.FindOne(); if ($null -ne $result) { $result.Properties.memberof }.

Chaque valeur identifie un groupe par son nom distinctif LDAP, qui inclut son chemin organisationnel. Le filtre cible le compte dont le nom figure dans $env:USERNAME ; il ne permet pas de sélectionner un autre utilisateur. memberOf représente les liens directs et ne répertorie pas le groupe principal. Cette méthode ne nécessite pas de module PowerShell distinct, mais elle requiert tout de même une connexion à l’annuaire et l’autorisation de lire le compte. La requête dépend de la capacité de l’environnement à résoudre les noms et à rechercher dans Active Directory ; cet article ne fournit aucun résultat d’exécution en domaine qui permettrait d’affirmer le contraire.
Pour afficher la partie nom commun d’exemples de noms distinctifs, appliquez une expression régulière aux chaînes renvoyées :

$memberOf = @(
    "CN=Finance,OU=Groups,DC=example,DC=com",
    "CN=Engineering,OU=Groups,DC=example,DC=com"
)
$memberOf -replace '^CN=([^,]+).+$', '$1'
Finance
Engineering

Cette transformation retire le chemin LDAP de chaque chaîne fournie ; elle n’effectue pas de requête dans l’annuaire. L’expression régulière suppose que le nom commun ne contient pas de virgule échappée.

Obtenir l’appartenance d’un utilisateur à des groupes avec un nouvel objet

DirectorySearcher offre une autre méthode intégrée pour rechercher un compte nommé. Cet exemple n’accepte volontairement qu’un sAMAccountName ASCII composé de lettres, de chiffres, de points, de traits de soulignement ou de traits d’union, et limité à 20 caractères. Rejetez toute autre entrée avant de construire le filtre LDAP : if ($username -notmatch '^[A-Za-z0-9._-]{1,20}$') { throw 'Use a valid account name.' }. Après validation, exécutez $searcher = New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$username))"); $result = $searcher.FindOne(); if ($null -ne $result) { $result.Properties.memberof }. Le jeu de caractères limité empêche la valeur fournie d’ajouter une syntaxe de filtre LDAP ; si votre annuaire autorise des noms de compte qui ne respectent pas ces restrictions, utilisez plutôt l’échappement des filtres LDAP.

Les valeurs renvoyées sont des noms distinctifs LDAP, et pas seulement des noms de groupes. Remplacez user01 par le nom de connexion du compte ciblé. Comme dans l’exemple ADSI, cette méthode lit l’attribut memberOf et ne développe donc pas les appartenances imbriquées ni n’inclut le groupe principal. Elle nécessite un accès à un annuaire de domaine, mais aucune installation de module distincte.

Obtenir l’appartenance d’un utilisateur à des groupes avec le module Active Directory

Le module Active Directory fournit des cmdlets conçues pour l’administration de l’annuaire. Il doit déjà être disponible sur l’ordinateur ; Install-Module ne suffit pas à installer ce module Windows. Installez RSAT en suivant les instructions Microsoft correspondant à la version de Windows utilisée. Cet article n’établit pas les commandes RSAT propres à une version ni leur compatibilité ; aucune commande de ce type n’est donc incluse ici.

Installer le module Active Directory

Après avoir installé le composant RSAT approprié, importez le module dans la session PowerShell avec Import-Module -Name ActiveDirectory.

Si le module n’est pas disponible, la commande d’importation ne pourra pas le charger. Les étapes d’installation varient selon la version de Windows : consultez les instructions RSAT actuelles de Microsoft pour cette version plutôt que de réutiliser une commande prévue pour une autre.

Utiliser la cmdlet Get-ADPrincipalGroupMembership

Transmettez le nom du compte à Get-ADPrincipalGroupMembership, puis sélectionnez les noms des groupes pour obtenir un affichage concis avec Get-ADPrincipalGroupMembership -Identity "user01" | Select-Object -ExpandProperty Name.

Remplacez user01 par l’identité du compte ciblé. La cmdlet renvoie des objets de groupe associés à ce principal ; la sélection de Name affiche leurs noms plutôt que leurs noms distinctifs LDAP. Cette commande nécessite le module Active Directory, une connexion adaptée à l’annuaire et les droits de lecture. Ces exemples ne disposent d’aucune preuve d’exécution dans un environnement de domaine Windows ; leurs résultats et comportements dépendant du domaine ne sont donc pas présentés comme ayant été testés.