Windows Active Directory grubundaki kullanıcıları listelemek için komut satırı


136

Belirli bir Active Directory grubundaki tüm kullanıcıları listelemek için bir komut satırı yolu var mı?

Bilgisayarı Yönet -> Yerel Kullanıcı / Gruplar -> Gruplar bölümüne gidip gruba çift ​​tıklayarak grubun içinde kim olduğunu görebilirim .

Sadece verileri almak için bir komut satırı yoluna ihtiyacım var, bu yüzden başka bazı otomatik işler yapabilirim.

Yanıtlar:


37

Deneyin

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

1
Muhtemelen iç içe geçmiş gruplardaki üyeleri ve çoğaltılmış üyeleri çözmek için biraz daha fazlasını yapmanız gerekir.
duffbeer703

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandyinelenenlerle yardımcı olmasa da, iç içe geçmiş gruplardaki üyeleri alır ve yalnızca CN'lerini değil, üye için tam AD sorgu dizesini verir.
jonnybot

2
Win7 SP1'de komut bulunamadı. RSAT'ın kurulu olmasına ihtiyacım var?
Iszi

11
'dsget' iç veya dış komut olarak kabul edilmez, vb ..
adolf sarımsak


237

İşte komut isteminden başka bir yol, çıktıyı ayrıştırmanız gerektiğinden ne kadar otomatikleştirilebileceğinden emin değilsiniz:

Eğer grup "global güvenlik grubu" ise:

net group <your_groupname> /domain

"Etki alanı yerel güvenlik grubu" arıyorsanız:

net localgroup <your_groupname> /domain

23
Bunun neden düşürüldüğünden emin değilim ... çıktı biraz ayrıştırma gerektirebilir, ancak yalnızca temel Windows kurulumunun bir parçası olan yardımcı programlara bağlı olma avantajına sahiptir.
G-Wiz

2
Ancak kesilen grup adlarının etrafında bir yol var mı?
de02392

1
Bu harika! Bir tedavi çalıştı.
WOPR

2
Bunun özyinelemeli olmadığını ve grup içindeki grupları listelemediğini unutmayın. İç içe geçmiş veya hiyerarşik gruplar oluşturduysanız çok yararlı değildir.
Mark

Bu benim için mükemmel bir şekilde çalışıyor (ve güzel bir şekilde el ele gidiyor net user /domain). Teşekkürler!
xan

49

İşte, özellikle karmaşık bir OU yapınız varsa ve grubun tam ayırt edici adını tam olarak bilmiyorsanız, ds komutunun bir versiyonunu daha faydalı buldum.

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

veya eğer grubun CN'sini biliyorsanız, isimde boşluklar olması durumunda, genellikle SAM ID ile aynıdır:

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

Yorumlarda belirtildiği gibi, varsayılan olarak ds * komutları (dsquery, dsget, dsadd, dsrm) yalnızca bir Etki Alanı Denetleyicisi'nde kullanılabilir. Ancak, Yönetici Araçları paketini Windows Server yükleme medyasındaki Destek Araçları'ndan yükleyebilir veya Microsoft Yükleme sitesinden indirebilirsiniz .

Bu sorguları PowerShell kullanarak da gerçekleştirebilirsiniz. PowerShell, Server 2008, 2008 R2 ve Windows 7 için yüklenebilir bir özellik olarak zaten mevcuttur, ancak bunu XP veya Vista'ya yüklemek için WinRM Framework'ü indirmeniz gerekir .

PowerShell herhangi AD özgü cmdlets erişim elde etmek için, olur AYRICA aşağıdaki yüklemelerin en az birini gerçekleştirmek gerekir:


Her zaman ilk sorguyu kullanırım
Jim B

1
Bu komutu etki alanı denetleyicisinde çalıştırmak zorunda olduğunuzu unutmayın.
skolima

9
Sen YAPMAYIN alanı denetleyicisinde bu komutu çalıştırmak zorunda. Ancak, DO Windows 2003 Server CDROM'unda Destek Araçları bulunan Yönetici Destek Paketi .msi yüklü olması gerekir. Ya da microsoft.com/downloads/en/…
Ryan Fisher

24

Görev AD eklentisi gerektirmeyen bir PowerShell çözümü için aşağıdakileri deneyin

Import-Module ActiveDirectory

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

Bu, iç içe geçmiş grupları da numaralandırır. Bunu yapmak istemezseniz, özyinelemeli anahtarı kaldırın .


6
ActiveDirectory modülünün Quest ActiveRoles AD ek bileşenine gereksinim duymaması gerektiği, ancak RSAT araçlarının yüklü olması ve AD'nizin Active Directory Web Hizmeti ile en az bir DC'sinin olması gerekir (2008 için) R2) veya Active Directory Yönetim Ağ Geçidi Hizmeti (2003, 2008 DC'ler için) yüklü. Ayrıntılar ve bağlantılar için yukarıdaki cevabımı gör.
Ryan Fisher

16

Sunucular ve istemciler üzerinde çalışan çok kolay bir yol:

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

Kullanıcı YOURGROUPNAME grubundaysa 1 döndürür, aksi takdirde 0 döndürür

Daha sonra% ERRORLEVEL% değerini (eğer gruptaki kullanıcı ise 0, eğer değilse 1) kullanabilirsiniz.

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

1
"Net group" komutu, yalnızca bilgisayarın birleştirildiği etki alanını (veya etki alanı ağacını) arar. Daha modern bir alternatif:whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT


7

Cevaplar burada kullanarak dsgetve dsquerysadece Windows (örneğin Windows 7) diğer sürümleri sevk edilmeyen komut yılların olarak Windows'un sunucu sürümlerinde çalışacak. Bu komutlara sahip olmayan makinelerde, AdFind komutunu kullanarak istediğiniz bilgileri alabilirsiniz .

İşte grup üyeliği almak için örnek bir sorgu:

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

4
ADFind.exe yine de yüklemeniz gereken üçüncü taraf bir araçtır. Ds * komutları, Yönetici Araçları paketi üzerinden yüklenebilir.
Ryan Fisher

4

Yerel gruplar ve kullanıcılar nasıl listelenir?

Yerel grupları ve bu grupların üyelerini listelemek için aşağıdaki powershell betiğini kullanın.

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

Yukarıdaki metni not defterine kopyalayın ve kaydedin filename.ps1. Ardından dosyayı çalıştırın. Her gruptaki Grupları ve Kullanıcıları görüntülemeliyim, yoksa bunu powershell'den çalıştırabilirsiniz.


Ben alıyorum cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:ve sonra giriş için sorarProcess[0]
Mike S

3

Denemenin ekran üyeleri için UserGroup1:

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

1
Hangi CLI yardımcı programını kullanacağınızı belirtmek isteyebilirsiniz. Bunun cmdbir nedenden dolayı çok iyi çalışacağını sanmıyorum .
UmutsuzN00b

@ ÜmitsizN00b: bu cmd olarak çalışıyor
Pete

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

@ HopelessN00b: UserGroup1 yoksa hata alıyorum, "Muhasebe *" gibi bir şey deneyin
Pete
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.