Baris perintah untuk mencantumkan pengguna dalam grup Windows Active Directory?

136

Apakah ada cara baris perintah untuk mendaftar semua pengguna dalam grup Active Directory tertentu?

Saya dapat melihat siapa yang ada di grup dengan masuk ke Kelola Komputer -> Pengguna Lokal / Grup -> Grup dan klik ganda grup.

Saya hanya perlu cara baris perintah untuk mengambil data, sehingga saya dapat melakukan beberapa tugas otomatis lainnya.

Peter Mortensen
sumber

Jawaban:

37

mencoba

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
pQd
sumber
1
Anda mungkin perlu melakukan sedikit lebih banyak untuk menyelesaikan anggota dan menggandakan anggota dalam grup bersarang.
duffbeer703
1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandmemberi Anda anggota dalam grup bersarang, meskipun mungkin tidak membantu dengan duplikat, dan memberi Anda string kueri AD lengkap untuk anggota, bukan hanya CN mereka.
jonnybot
2
Perintah tidak ditemukan di Win7 SP1. Saya kira Anda perlu menginstal RSAT?
Iszi
11
'dsget' tidak dikenali sebagai perintah internal atau eksternal, dll.
adolf garlic
1
@adolfgarlic - stackoverflow.com/questions/8514599/…
bchilders
238

Berikut cara lain dari command prompt, tidak yakin bagaimana bisa automatable karena Anda harus mengurai output:

Jika grup adalah "grup keamanan global":

net group <your_groupname> /domain

Jika Anda mencari "grup keamanan lokal domain":

net localgroup <your_groupname> /domain
Komunitas
sumber
23
tidak yakin mengapa ini diturunkan ... output mungkin memerlukan sedikit penguraian, tetapi memiliki keuntungan tergantung hanya pada utilitas yang merupakan bagian dari instalasi windows dasar.
G-Wiz
2
Tetapi apakah ada cara di sekitar nama grup yang terpotong?
deed02392
1
Ini bagus! Berhasil memperlakukan.
WOPR
2
Perhatikan bahwa ini bukan rekursif dan tidak mencantumkan grup yang ada di grup. Tidak sangat membantu jika Anda memiliki grup bersarang atau hierarkis.
Tandai
Ini bekerja dengan baik untuk saya (dan berjalan seiring dengan baik net user /domain). Terima kasih!
xan
49

Ini adalah versi dari perintah ds yang saya temukan lebih bermanfaat, terutama jika Anda memiliki struktur OU yang kompleks dan tidak perlu tahu nama lengkap grup.

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

atau jika Anda mengetahui CN grup, biasanya sama dengan ID SAM, dikutip jika ada spasi dalam nama:

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

Seperti yang dinyatakan dalam komentar, secara default perintah ds * (dsquery, dsget, dsadd, dsrm) hanya tersedia di Domain Controller. Namun, Anda dapat menginstal paket Alat Admin dari Alat Dukungan di media instalasi Windows Server atau mengunduhnya dari situs Unduh Microsoft.

Anda juga dapat melakukan kueri ini menggunakan PowerShell. PowerShell sudah tersedia sebagai fitur yang dapat diinstal untuk Server 2008, 2008 R2, dan Windows 7, tetapi Anda harus mengunduh WinRM Framework untuk menginstalnya di XP atau Vista.

Untuk mendapatkan akses ke setiap cmdlets-AD tertentu dalam PowerShell Anda akan JUGA perlu melakukan setidaknya salah satu dari menginstal berikut:

Ryan Fisher
sumber
Saya menggunakan permintaan pertama sepanjang waktu
Jim B
1
Ketahuilah bahwa Anda harus menjalankan perintah ini di pengontrol domain.
skolima
9
Anda TIDAK harus menjalankan perintah ini pada Kontroler Domain. Namun, Anda DO perlu menginstal Admin Support Pack .msi yang termasuk dalam alat dukungan pada Server CDROM Windows 2003. Atau unduh dari microsoft.com/downloads/en/…
Ryan Fisher
24

Untuk solusi PowerShell yang tidak memerlukan tambahan AD Quest, coba yang berikut ini

Import-Module ActiveDirectory

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

Ini akan menghitung kelompok bersarang juga. Jika Anda tidak ingin melakukannya, lepaskan sakelar -recursive .

pk.
sumber
6
Anda benar bahwa modul ActiveDirectory tidak memerlukan snap-in AD ActiveRoles Quest, tetapi itu mengharuskan Anda menginstal alat RSAT dan bahwa AD Anda memiliki setidaknya satu DC dengan Layanan Web Direktori Aktif (untuk 2008 R2) atau Layanan Gateway Manajemen Direktori Aktif (untuk 2003, 2008 DC) diinstal. Lihat jawaban saya di atas untuk perincian dan tautan.
Ryan Fisher
16

Cara yang sangat mudah yang bekerja di server dan klien:

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

Mengembalikan 1 jika pengguna dalam grup YOURGROUPNAME, yang lain akan mengembalikan 0

Anda kemudian dapat menggunakan nilai% ERRORLEVEL% (0 jika pengguna dalam grup, 1 jika tidak) suka

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
Deajan
sumber
1
Perintah "grup bersih" hanya mencari domain (atau pohon domain) tempat komputer bergabung. Alternatif yang lebih modern adalah: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT
10

Dengan menggunakan Shell Management ActiveRole PowerShell dan Quest Software Gratis untuk Direktori Aktif, Anda dapat menggunakan:

(Get-QADGroup "GroupName"). Anggota

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

Gordon Bell
sumber
Juga: Dapatkan-QADGroupMember 'GroupName'
Gordon Bell
7

Jawaban di sini menggunakan dsgetdan dsqueryhanya akan bekerja pada versi server Windows karena perintah tersebut tidak dikirimkan pada versi Windows lainnya (misalnya Windows 7). Pada mesin tanpa perintah itu, Anda bisa mendapatkan informasi yang Anda inginkan menggunakan perintah AdFind .

Berikut ini contoh permintaan untuk mendapatkan keanggotaan grup:

AdFind.exe -default -f name="Domain Admins" member -list
markshep
sumber
4
ADFind.exe adalah alat pihak ketiga yang harus Anda instal. Perintah ds * dapat diinstal melalui paket Alat Admin.
Ryan Fisher
4

Bagaimana cara mendaftar grup dan pengguna lokal?

Gunakan skrip powershell berikut untuk mendaftar grup lokal dan anggota grup tersebut.

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

Salin teks di atas ke dalam notepad dan simpan sebagai filename.ps1. Kemudian jalankan file tersebut. Saya harus menampilkan Grup dan Pengguna di setiap grup, atau Anda bisa menjalankan ini dari PowerShell.

Sysadmin
sumber
Saya mendapatkan, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:dan kemudian meminta masukan,Process[0]
Mike S
3

Untuk menampilkan anggota UserGroup1percobaan:

dsquery group -name UserGroup1 | dsget group -members | dsget user -display
vadim
sumber
1
Mungkin ingin menunjukkan utilitas CLI yang Anda gunakan ini. Saya tidak berpikir itu akan bekerja dengan baik dari cmd, untuk beberapa alasan.
HopelessN00b
@ HopelessN00b: ini berfungsi dalam cmd
Pete
@Pete Newp! dsget failed:'Target object for this command' is missing.
HopelessN00b
@ HopelessN00b: Saya mendapatkan kesalahan jika UserGroup1 tidak ada, coba sesuatu seperti "Akuntansi *"
Pete