Ligne de commande pour répertorier les utilisateurs d’un groupe Windows Active Directory?


136

Existe-t-il un moyen en ligne de commande pour répertorier tous les utilisateurs d'un groupe Active Directory particulier?

Je peux voir qui est dans le groupe en allant dans Gestion de l'ordinateur -> Utilisateurs / groupes locaux -> Groupes et en double-cliquant sur le groupe.

J'ai juste besoin d'un moyen de ligne de commande pour récupérer les données, afin de pouvoir effectuer d'autres tâches automatisées.

Réponses:


37

essayer

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members

1
Vous devrez probablement faire un peu plus pour résoudre les membres et les doublons dans les groupes imbriqués.
duffbeer703

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandvous donne les membres des groupes imbriqués, bien que cela puisse ne pas aider les doublons, et vous donne la chaîne de requête AD complète pour le membre, pas seulement son CN.
jonnybot

2
Commande introuvable sur Win7 SP1. Je suppose que vous avez besoin d'installer RSAT?
Iszi

11
'dsget' n'est pas reconnu comme une commande interne ou externe, etc.
Adolf ail


238

Voici une autre méthode à partir de l'invite de commande, vous ne savez pas comment elle est automatisable, car vous devrez analyser le résultat:

Si le groupe est "groupe de sécurité global":

net group <your_groupname> /domain

Si vous recherchez un "groupe de sécurité local de domaine":

net localgroup <your_groupname> /domain

23
vous ne savez pas pourquoi cela a été annulé ... la sortie peut nécessiter un peu d'analyse syntaxique, mais elle présente l'avantage de ne dépendre que des utilitaires faisant partie de l'installation de la fenêtre de base.
G-Wiz

2
Mais existe-t-il un moyen de contourner les noms de groupes tronqués?
deed02392

1
C'est bien! A travaillé un régal.
WOPR

2
Notez que ce n'est pas récursif et ne répertorie pas les groupes qui sont dans un groupe. Pas très utile si vous avez des groupes imbriqués ou hiérarchiques.
Mark

Cela fonctionne parfaitement pour moi (et va bien main dans la main avec net user /domain). Merci!
xan

49

Voici une version de la commande ds que j'ai trouvée plus utile, en particulier si vous avez une structure OU complexe et que vous ne connaissez pas nécessairement le nom distinctif complet du groupe.

dsquery group -samid "Group_SAM_Account_Name" | dsget group -members -expand

ou si vous connaissez le CN du groupe, généralement identique à l'ID SAM, indiqué au cas où il y aurait des espaces dans le nom:

dsquery group -name "Group Account Name" | dsget group -members -expand

Comme indiqué dans les commentaires, par défaut, les commandes ds * (dsquery, dsget, dsadd, dsrm) ne sont disponibles que sur un contrôleur de domaine. Toutefois, vous pouvez installer le pack Outils d'administration à partir des outils de support du support d'installation de Windows Server ou le télécharger à partir du site de téléchargement de Microsoft.

Vous pouvez également effectuer ces requêtes à l'aide de PowerShell. PowerShell est déjà disponible en tant que fonctionnalité installable pour Server 2008, 2008 R2 et Windows 7, mais vous devez télécharger WinRM Framework pour l'installer sur XP ou Vista.

Pour avoir accès à des cmdlets spécifiques à AD dans PowerShell vous AUSSI besoin d'effectuer au moins l' une des installations suivantes:


J'utilise tout le temps la première requête
Jim B Le

1
Sachez que vous devez exécuter cette commande sur le contrôleur de domaine.
Skolima

9
Vous n'avez PAS à exécuter cette commande sur un contrôleur de domaine. Cependant, vous NE devez avoir installé le Administrateur Support Pack .msi qui est inclus dans les outils de support sur le CD - ROM Windows 2003 Server. Ou téléchargez-le à partir de microsoft.com/downloads/en/…
Ryan Fisher

24

Pour une solution PowerShell ne nécessitant pas le complément Quest AD, essayez ce qui suit.

Import-Module ActiveDirectory

Get-ADGroupMember "Domain Admins" -recursive | Select-Object name

Cela énumérera également les groupes imbriqués. Si vous ne le souhaitez pas, supprimez le commutateur -recursive .


6
Vous avez raison de dire que le module ActiveDirectory ne nécessite pas le composant logiciel enfichable Quest ActiveRoles Quest, mais que les outils RSAT doivent être installés et que votre AD dispose d'au moins un contrôleur de domaine avec le service Web Active Directory (pour 2008). R2) ou le service Active Directory Management Gateway (pour les contrôleurs de domaine 2003, 2008) installé. Voir ma réponse ci-dessus pour les détails et les liens.
Ryan Fisher

16

Un moyen très simple qui fonctionne sur les serveurs et les clients:

NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"

Retourne 1 si l'utilisateur est dans le groupe YOURGROUPNAME, sinon retournera 0

Vous pouvez ensuite utiliser la valeur% ERRORLEVEL% (0 si utilisateur du groupe, 1 sinon) comme

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE

1
La commande "net group" recherche uniquement le domaine (ou l’arborescence des domaines) où l’ordinateur est joint. Une alternative plus moderne est: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT


7

Les réponses fournies ici n'utilisent dsgetet dsqueryne fonctionneront que sur les versions serveur de Windows, car ces commandes ne sont pas fournies avec les autres versions de Windows (par exemple Windows 7). Sur les machines sans ces commandes, vous pouvez obtenir les informations souhaitées à l'aide de la commande AdFind .

Voici un exemple de requête pour obtenir l'appartenance à un groupe:

AdFind.exe -default -f name="Domain Admins" member -list

4
ADFind.exe est un outil tiers que vous devez installer quand même. Les commandes ds * peuvent être installées via le pack Outils admin.
Ryan Fisher

4

Comment lister les groupes et les utilisateurs locaux?

Utilisez le script PowerShell suivant pour répertorier les groupes locaux et les membres de ces groupes.

$server="YourServerName"
$computer = [ADSI]"WinNT://$server,computer"

$computer.psbase.children | where { 

$_.psbase.schemaClassName -eq 'group' } | foreach {
    write-host $_.name
    write-host "------"
    $group =[ADSI]$_.psbase.Path
    $group.psbase.Invoke("Members") | foreach {
$_.GetType().InvokeMember("Name", 'GetProperty', 

$null, $_, $null)}
    write-host
}

Copiez le texte ci-dessus dans le bloc-notes et enregistrez-le sous filename.ps1. Puis lancez le fichier. Je devrais afficher les groupes et les utilisateurs de chaque groupe, ou vous pouvez simplement l'exécuter à partir de Powershell.


Je reçois, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:puis demande à l'entrée,Process[0]
Mike S

3

Pour les membres de l’ UserGroup1essai:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display

1
Peut-être voudriez-vous préciser l’utilité de l’utilitaire CLI dans lequel vous utiliseriez cela. Je ne pense pas que cela fonctionne très bien cmd, pour une raison quelconque.
HopelessN00b

@ HopelessN00b: cela fonctionne en cmd
Pete

@Pete Newp! dsget failed:'Target object for this command' is missing.
HopelessN00b

@ HopelessN00b: J'obtiens une erreur si le groupe d'utilisateurs1 n'existe pas, essayez quelque chose comme "Comptabilité *"
Pete
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.