Wiersz poleceń, aby wyświetlić listę użytkowników w grupie Windows Active Directory?

136

Czy istnieje sposób wiersza poleceń, aby wyświetlić listę wszystkich użytkowników w określonej grupie Active Directory?

Widzę, kto jest w grupie, przechodząc do opcji Zarządzaj komputerem -> Lokalny użytkownik / grupy -> Grupy i klikając dwukrotnie grupę.

Potrzebuję tylko wiersza polecenia do odzyskania danych, aby móc wykonywać inne automatyczne zadania.

Peter Mortensen
źródło

Odpowiedzi:

37

próbować

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
pQd
źródło
1
Prawdopodobnie musisz zrobić coś więcej, aby rozwiązać członków i zduplikować członków w grupach zagnieżdżonych.
duffbeer703
1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expanddostaje członków w zagnieżdżonych grupach, chociaż może nie pomóc w duplikatach, i daje pełny ciąg zapytania AD dla członka, a nie tylko jego CN.
jonnybot
2
Nie znaleziono polecenia w Win7 SP1. Zgaduję, że potrzebujesz RSAT?
Iszi
11
„dsget” nie jest rozpoznawany jako polecenie wewnętrzne ani zewnętrzne itp.
czosnek Adolfa
1
@adolfgarlic - stackoverflow.com/questions/8514599/…
bchilders
237

Oto inny sposób z wiersza polecenia, ale nie jestem pewien, jak automatyczny, ponieważ trzeba przeanalizować dane wyjściowe:

Jeśli grupą jest „globalna grupa zabezpieczeń”:

net group <your_groupname> /domain

Jeśli szukasz „lokalnej grupy zabezpieczeń domeny”:

net localgroup <your_groupname> /domain
Społeczność
źródło
23
nie jestem pewien, dlaczego zostało to zanegowane ... dane wyjściowe mogą wymagać niewielkiej analizy, ale mają tę zaletę, że polegają tylko na narzędziach, które są częścią podstawowej instalacji systemu Windows.
G-Wiz
2
Ale czy jest jakiś sposób na obcięcie nazw grup?
deed02392
1
To jest świetne! Pracował uczta.
WOPR
2
Pamiętaj, że nie jest to rekurencyjne i nie zawiera list grup należących do grupy. Niezbyt pomocne, jeśli masz grupy zagnieżdżone lub hierarchiczne.
Mark
Działa to dla mnie idealnie (i ładnie idzie w parze net user /domain). Dzięki!
Xan
49

Oto wersja polecenia ds, którą uważam za bardziej przydatną, zwłaszcza jeśli masz złożoną strukturę jednostek organizacyjnych i niekoniecznie znasz pełną nazwę wyróżniającą grupy.

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

lub jeśli znasz numer CN grupy, zwykle taki sam jak identyfikator SAM, podany w przypadku, gdy w nazwie znajdują się spacje:

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

Jak stwierdzono w komentarzach, domyślnie polecenia ds * (dsquery, dsget, dsadd, dsrm) są dostępne tylko na kontrolerze domeny. Możesz jednak zainstalować pakiet narzędzi administracyjnych z narzędzi obsługi na nośniku instalacyjnym systemu Windows Server lub pobrać go z witryny pobierania firmy Microsoft.

Możesz również wykonać te zapytania za pomocą PowerShell. PowerShell jest już dostępny jako funkcja do zainstalowania na serwerach 2008, 2008 R2 i Windows 7, ale musisz pobrać program WinRM Framework, aby zainstalować go na XP lub Vista.

Aby uzyskać dostęp do wszystkich poleceń cmdlet AD specyficzne w PowerShell będzie TAKŻE trzeba wykonać co najmniej jedną z następujących instalacjach:

Ryan Fisher
źródło
Zawsze używam pierwszego zapytania
Jim B
1
Pamiętaj, że musisz uruchomić to polecenie na kontrolerze domeny.
skolima
9
Ty NIE trzeba uruchamiać tego polecenia na kontrolerze domeny. Jednak NIE musisz mieć zainstalowanego pakietu administracyjnego .msi, który znajduje się w Narzędziach pomocy na dysku CD-ROM z systemem Windows 2003 Server. Lub pobierz go z microsoft.com/downloads/en/…
Ryan Fisher
24

W przypadku rozwiązania PowerShell, które nie wymaga dodatku Quest AD, wypróbuj następujące rozwiązania

Import-Module ActiveDirectory

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

Spowoduje to również wyliczenie grup zagnieżdżonych. Jeśli nie chcesz tego robić, usuń przełącznik -recursive .

pk.
źródło
6
Masz rację, że moduł ActiveDirectory nie wymaga przystawki AD ActiveRoles AD, ale wymaga zainstalowania narzędzi RSAT i że AD ma co najmniej jeden kontroler domeny z usługą Active Directory Web Service (dla 2008 R2) lub zainstalowana usługa bramy zarządzania usługi Active Directory (dla kontrolerów domeny 2003, 2008). Zobacz moją odpowiedź powyżej, aby uzyskać szczegółowe informacje i linki.
Ryan Fisher
16

Bardzo prosty sposób, który działa na serwerach i klientach:

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

Zwraca 1, jeśli użytkownik jest w grupie NAZWA TWOJEJ GRUPY, w przeciwnym razie zwróci 0

Następnie możesz użyć wartości% ERRORLEVEL% (0, jeśli użytkownik w grupie, 1, jeśli nie), jak

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
deajan
źródło
1
Polecenie „grupa sieci” przeszukuje tylko domenę (lub drzewo domen), do której przyłączony jest komputer. Bardziej nowoczesną alternatywą jest: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT
10

Korzystając z bezpłatnej powłoki ActiveRoles Management Shell programu PowerShell i Quest Software dla usługi Active Directory, możesz użyć:

(Get-QADGroup „GroupName”). Członkowie

http://www.quest.com/powershell/activeroles-server.aspx

Gordon Bell
źródło
Również: Get-QADGroupMember „GroupName”
Gordon Bell
7

Odpowiedzi tutaj przy użyciu dsgeti dsquerybędą działać tylko na serwerowych wersjach systemu Windows, ponieważ te polecenia nie są dostarczane w innych wersjach systemu Windows (np. Windows 7). Na komputerach bez tych poleceń możesz uzyskać potrzebne informacje za pomocą polecenia AdFind .

Oto przykładowe zapytanie dotyczące członkostwa w grupie:

AdFind.exe -default -f name="Domain Admins" member -list
markhep
źródło
4
ADFind.exe to narzędzie strony trzeciej, które i tak musisz zainstalować. Polecenia ds * można zainstalować za pomocą pakietu narzędzi administracyjnych.
Ryan Fisher
4

Jak wyświetlić listę lokalnych grup i użytkowników?

Użyj poniższego skryptu programu PowerShell, aby wyświetlić listę lokalnych grup i członków tych grup.

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

Skopiuj powyższy tekst do notatnika i zapisz jako filename.ps1. Następnie uruchom plik. Powinienem wyświetlić Grupy i Użytkowników w każdej grupie, albo możesz po prostu uruchomić to z PowerShell.

Sysadmin
źródło
Rozumiem, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:a potem pytam o dane wejścioweProcess[0]
Mike S
3

Aby wyświetlić członków UserGroup1próby:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display
Vadim
źródło
1
Może chciałbym wskazać narzędzie CLI, w którym byś go używał. Nie sądzę, że z cmdjakiegoś powodu to zadziała zbyt dobrze .
HopelessN00b
@ HopelessN00b: działa to w cmd
Pete
@Pete Newp! dsget failed:'Target object for this command' is missing.
HopelessN00b,
@ HopelessN00b: Występuje błąd, jeśli UserGroup1 nie istnieje, spróbuj czegoś takiego jak „Księgowość *”
Pete,