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

Marion Paul Kenneth Mendoza 30 janvier 2023
  1. Obtenir l’appartenance à un groupe d’utilisateurs avec les commandes héritées net
  2. Obtenir l’adhésion d’un utilisateur à un groupe avec ADSI
  3. Obtenir l’appartenance à un groupe d’utilisateurs avec un nouvel objet
  4. Obtenir l’appartenance à un groupe d’utilisateurs avec le module Active Directory
Obtenir l'appartenance à tous les groupes d'un utilisateur à l'aide de PowerShell

Dans Windows PowerShell, il existe de nombreuses façons de récupérer la liste des membres d’un groupe d’utilisateurs spécifiques. Nous pouvons utiliser des commandes héritées, des commandes natives ou des extensions pour s’exécuter dans l’environnement de script de PowerShell.

Cet article discutera de toutes ces méthodes une par une, de leurs avantages et inconvénients, et comment elles sont correctement exécutées.

Les commandes suivantes ne fonctionneront correctement que si votre ordinateur ou votre serveur est joint au domaine. L’utilisation du domaine par défaut WORKGROUP entraînera une erreur d’exception.

Obtenir l’appartenance à un groupe d’utilisateurs avec les commandes héritées net

Nous pouvons commencer avec une commande héritée qui existe depuis les tout premiers stades du système d’exploitation, que nous appelons les commandes net. Les commandes net sont généralement exécutées dans l’invite de commande et fonctionnent avec Windows PowerShell via des alias.

Les commandes net sont généralement utilisées pour gérer l’ordinateur local. Néanmoins, nous pouvons utiliser la commande pour obtenir l’adhésion d’un utilisateur spécifique à cette fin particulière en utilisant la syntaxe ci-dessous.

net user /domain username

L’utilisation de cette méthode ne renvoie pas seulement les groupes de domaine globaux, mais également les groupes locaux de l’utilisateur.

L’un des inconvénients de cette commande est qu’elle est moins flexible que les nouvelles cmdlets Windows PowerShell. De plus, nous ne verrons pas correctement les noms de groupe longs (environ 21 caractères) lors de l’exportation car ils seront tronqués dans la ligne de commande.

Obtenir l’adhésion d’un utilisateur à un groupe avec ADSI

Selon Microsoft, ADSI ou Active Directory Service Interfaces sont des interfaces COM intégrées utilisées pour accéder aux services d’annuaire. Dans la bibliothèque ADSI se trouve la classe [ADSISearcher] que nous pouvons exécuter dans Windows PowerShell pour interroger l’appartenance à un groupe d’un utilisateur actuel.

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof

Nous pouvons améliorer cela en ajoutant regex pour supprimer les caractères LDAP inutiles CN="groupname", qui ne renverront que les noms de groupe de l’utilisateur.

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1'

Cette méthode ne nécessitera aucune installation de module pour s’exécuter car elle est intégrée à la machine. La seule exigence dont il aura besoin est une machine jointe dans un domaine. L’exécution de la syntaxe ci-dessus lèvera une exception d’erreur.

Le seul inconvénient de cette syntaxe est que la requête ne fonctionnera qu’avec un utilisateur actuellement connecté. Cela signifie que vous ne pouvez pas cibler un autre utilisateur lors de l’exécution de la syntaxe lorsque vous êtes connecté.

Obtenir l’appartenance à un groupe d’utilisateurs avec un nouvel objet

Une autre méthode pour obtenir l’appartenance d’un utilisateur à un groupe consiste à utiliser les services d’annuaire et à créer un nouvel objet. Dans cette méthode, nous n’avons pas non plus besoin d’installer un module séparé pour que cela fonctionne.

De plus, cette méthode peut cibler un utilisateur spécifique à l’intérieur de votre domaine car elle interrogera le contrôleur de domaine auquel vous êtes actuellement connecté à l’intérieur du réseau.

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:USERNAME)))")).FindOne().GetDirectoryEntry().memberOf

Si vous ne souhaitez pas interroger l’utilisateur connecté, vous pouvez remplacer $env:USERNAME par le nom d’utilisateur exact de l’utilisateur cible.

$username = "user01"
(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($username)))")).FindOne().GetDirectoryEntry().memberOf

Cette méthode produira des caractères LDAP inutiles et produira toute la base de recherche de l’unité organisationnelle (UO) comme la méthode précédente.

Obtenir l’appartenance à un groupe d’utilisateurs avec le module Active Directory

Nous pouvons considérer qu’il s’agit de l’une des méthodes les plus simples et les plus courtes pour obtenir l’adhésion d’un utilisateur à un groupe pour cette dernière méthode. La seule condition pour cette méthode est d’installer le module Active Directory pour importer les cmdlets AD dans notre environnement de script.

Installation du module Active Directory

Habituellement, en exécutant la cmdlet, Install-Module doit récupérer le package à partir d’un CDN distant et l’installer sur votre ordinateur. Néanmoins, avec le module Active Directory, vous devez installer un package prérequis pour réussir. Ce package prérequis est ce que nous appelons les outils d’administration de serveur distant ou RSAT.

Pour installer RSAT sur votre ordinateur ou sur le serveur, vous pouvez exécuter les scripts PowerShell ci-dessous.

Installation de RSAT pour Windows 10 :

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online

Installation de RSAT pour Windows Server (versions multiples de 2008 à 2016) :

Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature

L’installation de la fonctionnalité RSAT sur votre machine installera également le module Active Directory pour Windows PowerShell.

Utilisation de la cmdlet Get-ADPrincipalGroupMembership

Une fois le module Active Directory installé, vous pouvez maintenant importer le module Active Directory avec la syntaxe suivante.

Import-Module -Name ActiveDirectory

Une fois le module Active Directory importé, vous pouvez maintenant exécuter des cmdlets AD, et nous utiliserons ces cmdlets étendues spécifiques pour obtenir la liste des membres d’un groupe d’utilisateurs.

Pour obtenir l’appartenance à un groupe d’utilisateurs, nous utiliserons la cmdlet Get-ADPrincipalGroupMembership. Cette cmdlet renverra tous les groupes AD de l’utilisateur, de l’ordinateur, du groupe ou du compte de service. De plus, puisque nous pouvons cibler des utilisateurs et des objets de groupe, cette cmdlet renverra également les appartenances aux groupes imbriqués.

Exécutez la syntaxe ci-dessous pour obtenir l’appartenance au groupe de l’utilisateur. Assurez-vous que le module Active Directory est importé.

Get-ADPrincipalGroupMembership username | select name

La canalisation de la propriété name affichera toutes les appartenances aux groupes d’utilisateurs.

Production :

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn