Befehlszeile zum Auflisten von Benutzern in einer Windows Active Directory-Gruppe?


136

Gibt es eine Befehlszeilenmethode zum Auflisten aller Benutzer in einer bestimmten Active Directory-Gruppe?

Ich kann sehen, wer in der Gruppe ist, indem ich zu Computer verwalten -> Lokaler Benutzer / Gruppen -> Gruppen gehe und auf die Gruppe doppelklicke.

Ich brauche nur eine Befehlszeile, um die Daten abzurufen, damit ich einige andere automatisierte Aufgaben ausführen kann.

Antworten:


37

Versuchen

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

1
Wahrscheinlich müssen Sie etwas mehr tun, um Mitglieder aufzulösen und Mitglieder in verschachtelten Gruppen zu duplizieren.
Duffbeer703

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandSie erhalten die Mitglieder in den verschachtelten Gruppen, obwohl dies bei Duplikaten möglicherweise nicht hilft, und Sie erhalten die vollständige AD-Abfragezeichenfolge für das Mitglied, nicht nur dessen CN.
Jonnybot

2
Befehl in Win7 SP1 nicht gefunden. Ich vermute, Sie brauchen RSAT installiert?
Iszi

11
'dsget' wird nicht als interner oder externer Befehl usw. erkannt.
Adolf Knoblauch


238

Hier ist ein anderer Weg von der Eingabeaufforderung, nicht sicher, wie automatisierbar, da Sie die Ausgabe analysieren müssten:

Wenn die Gruppe "globale Sicherheitsgruppe" ist:

net group <your_groupname> /domain

Wenn Sie nach "Domain Local Security Group" suchen:

net localgroup <your_groupname> /domain

23
Ich bin mir nicht sicher, warum dies herabgestuft wurde. Die Ausgabe erfordert möglicherweise ein wenig Analyse, hat jedoch den Vorteil, dass sie nur von den Dienstprogrammen abhängt, die Teil der Basis-Windows-Installation sind.
G-Wiz

2
Aber gibt es einen Weg um die abgeschnittenen Gruppennamen herum?
deed02392

1
Das ist toll! Wirkte ein Vergnügen.
WOPR

2
Beachten Sie, dass dies nicht rekursiv ist und keine Gruppen auflistet, die zu einer Gruppe gehören. Nicht sehr hilfreich, wenn Sie verschachtelte oder hierarchische Gruppen haben.
Mark

Dies funktioniert perfekt für mich (und geht Hand in Hand mit net user /domain). Vielen Dank!
xan

49

Hier ist eine Version des Befehls ds, die ich eher nützlich fand, insbesondere, wenn Sie eine komplexe OU-Struktur haben und nicht unbedingt den vollständigen definierten Namen der Gruppe kennen.

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

oder wenn Sie den CN der Gruppe kennen, normalerweise derselbe wie die SAM-ID, angegeben für den Fall, dass der Name Leerzeichen enthält:

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

Wie in den Kommentaren angegeben, sind die ds * -Befehle (dsquery, dsget, dsadd, dsrm) standardmäßig nur auf einem Domänencontroller verfügbar. Sie können jedoch die Admin Tools packen aus dem Support Tool auf dem Windows Server - Installationsmedium installieren oder es herunterladen von der Microsoft Download - Website.

Sie können diese Abfragen auch mit PowerShell ausführen. PowerShell ist bereits als installierbare Funktion für Server 2008, 2008 R2 und Windows 7 verfügbar. Sie müssen jedoch das WinRM-Framework herunterladen , um es unter XP oder Vista zu installieren.

Um auf AD-spezifische Cmdlets in PowerShell zugreifen zu können, müssen Sie AUCH mindestens eine der folgenden Installationen ausführen:


Ich benutze die erste Abfrage die ganze Zeit
Jim B

1
Beachten Sie, dass Sie diesen Befehl auf dem Domänencontroller ausführen müssen.
Skolima

9
Sie müssen diesen Befehl NICHT auf einem Domänencontroller ausführen. Allerdings Sie DO müssen die Admin - Support Pack .msi installiert haben , die in den Supporttools auf der Windows 2003 Server - CD - ROM enthalten ist. Oder laden Sie es von microsoft.com/downloads/en/…
Ryan Fisher am

24

Versuchen Sie Folgendes für eine PowerShell-Lösung, für die das Quest AD-Add-In nicht erforderlich ist

Import-Module ActiveDirectory

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

Dadurch werden auch die verschachtelten Gruppen aufgelistet. Wenn Sie dies nicht möchten, entfernen Sie den rekursiven Schalter.


6
Sie haben Recht, dass für das ActiveDirectory-Modul das Quest ActiveRoles AD-Snap-In nicht erforderlich ist. Voraussetzung ist jedoch, dass die RSAT-Tools installiert sind und auf Ihrem AD mindestens ein Domänencontroller mit dem Active Directory-Webdienst (für 2008) vorhanden ist R2) oder der Active Directory-Verwaltungsgateway-Dienst (für Domänencontroller 2003, 2008) installiert. Siehe meine Antwort oben für Details und Links.
Ryan Fisher

16

Ein sehr einfacher Weg, der auf Servern und Clients funktioniert:

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

Gibt 1 zurück, wenn sich der Benutzer in der Gruppe YOURGROUPNAME befindet, andernfalls wird 0 zurückgegeben

Sie können dann den Wert% ERRORLEVEL% verwenden (0, wenn Benutzer in Gruppe, 1, wenn nicht)

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

1
Der Befehl "net group" durchsucht nur die Domäne (oder den Domänenbaum), zu der der Computer gehört. Eine modernere Alternative ist: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT


7

Die Antworten hier mit dsgetund dsqueryfunktionieren nur auf Serverversionen von Windows, da diese Befehle nicht auf anderen Windows-Versionen (z. B. Windows 7) ausgeliefert werden. Auf Computern ohne diese Befehle können Sie die gewünschten Informationen mit dem AdFind-Befehl abrufen .

Hier ist eine Beispielabfrage zum Abrufen der Gruppenmitgliedschaft:

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

4
ADFind.exe ist ein Drittanbieter-Tool, das Sie trotzdem installieren müssen. Die ds * -Befehle können über das Admin-Tools-Paket installiert werden.
Ryan Fisher

4

Wie liste ich lokale Gruppen und Benutzer auf?

Verwenden Sie das folgende Powershell-Skript, um die lokalen Gruppen und Mitglieder dieser Gruppen aufzulisten.

$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
}

Kopieren Sie den obigen Text in den Editor und speichern Sie ihn unter filename.ps1. Führen Sie dann die Datei aus. Ich sollte die Gruppen und Benutzer in jeder Gruppe anzeigen, oder Sie können dies einfach von Powershell ausführen.


Ich bekomme cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:und frage dann nach Eingabe,Process[0]
Mike S

3

Für Anzeigemitglieder des UserGroup1Versuchs:

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

1
Vielleicht möchten Sie darauf hinweisen, in welchem ​​CLI-Dienstprogramm Sie dies verwenden würden. Ich denke, das wird aus cmdirgendeinem Grund nicht allzu gut funktionieren .
HopelessN00b

@ HopelessN00b: Dies funktioniert in cmd
Pete

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

@ HopelessN00b: Ich erhalte eine Fehlermeldung, wenn UserGroup1 nicht existiert. Versuchen Sie es mit "Accounting *"
Pete,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.