บรรทัดคำสั่งเพื่อแสดงผู้ใช้ในกลุ่ม Windows Active Directory หรือไม่


136

มีวิธีบรรทัดคำสั่งเพื่อแสดงรายการผู้ใช้ทั้งหมดในกลุ่ม Active Directory เฉพาะหรือไม่

ฉันสามารถดูว่าใครอยู่ในกลุ่มโดยไปที่จัดการคอมพิวเตอร์ -> ผู้ใช้ภายใน / กลุ่ม -> กลุ่มและดับเบิลคลิกที่กลุ่ม

ฉันแค่ต้องการบรรทัดคำสั่งเพื่อดึงข้อมูลเพื่อให้ฉันสามารถทำงานอัตโนมัติอื่น ๆ ได้

คำตอบ:


37

ลอง

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

1
คุณอาจต้องทำเพิ่มอีกนิดเพื่อแก้ไขสมาชิกและสมาชิกที่ซ้ำซ้อนในกลุ่มที่ซ้อนกัน
duffbeer703

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandทำให้คุณได้รับสมาชิกในกลุ่มที่ซ้อนกันถึงแม้ว่ามันอาจจะไม่ได้ช่วยในการทำซ้ำและมันจะช่วยให้คุณสตริงแบบสอบถาม AD เต็มรูปแบบสำหรับสมาชิกไม่ใช่แค่ CN ของพวกเขา
jonnybot

2
ไม่พบคำสั่งใน Win7 SP1 ฉันคาดเดาว่าคุณต้องติดตั้ง RSAT หรือไม่
Iszi

11
'dsget' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก ฯลฯ
adolf garlic


237

ต่อไปนี้เป็นอีกวิธีหนึ่งจากพรอมต์คำสั่งไม่แน่ใจว่าเป็นไปโดยอัตโนมัติอย่างไรเนื่องจากคุณต้องแยกวิเคราะห์เอาต์พุต:

หากกลุ่มคือ "กลุ่มความปลอดภัยระดับโลก":

net group <your_groupname> /domain

หากคุณกำลังมองหา "กลุ่มความปลอดภัยท้องถิ่นของโดเมน":

net localgroup <your_groupname> /domain

23
ไม่แน่ใจว่าทำไม downvote นี้ ... เอาต์พุตอาจต้องมีการแยกวิเคราะห์เล็กน้อย แต่ก็มีข้อดีของการขึ้นอยู่กับยูทิลิตี้ที่เป็นส่วนหนึ่งของการติดตั้ง windows พื้นฐานเท่านั้น
G-Wiz

2
แต่มีวิธีการรอบชื่อกลุ่มที่ถูกตัดทอน?
deed02392

1
มันเยี่ยมมาก! ทำงานรักษา
WOPR

2
โปรดทราบว่านี่ไม่ใช่การเรียกซ้ำและไม่แสดงรายการกลุ่มที่อยู่ในกลุ่ม ไม่ค่อยมีประโยชน์หากคุณมีกลุ่มซ้อนหรือลำดับชั้น
Mark

มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน (และไปจับคู่กันด้วยnet user /domain) ขอบคุณ!
xan

49

นี่เป็นเวอร์ชันของคำสั่ง ds ที่ฉันพบว่ามีประโยชน์มากกว่าโดยเฉพาะถ้าคุณมีโครงสร้าง OU ที่ซับซ้อนและไม่จำเป็นต้องรู้ชื่อที่แตกต่างแบบเต็มของกลุ่ม

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

หรือถ้าคุณรู้จัก CN ของกลุ่มโดยปกติจะเหมือนกับ SAM ID ที่ยกมาในกรณีที่มีช่องว่างในชื่อ:

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

ตามที่ระบุไว้ในความคิดเห็นโดยค่าเริ่มต้นคำสั่ง ds * (dsquery, dsget, dsadd, dsrm) จะใช้ได้เฉพาะในตัวควบคุมโดเมน อย่างไรก็ตามคุณสามารถติดตั้งชุดเครื่องมือผู้ดูแลระบบจากเครื่องมือสนับสนุนบนสื่อการติดตั้ง Windows Server หรือดาวน์โหลดได้จากเว็บไซต์ดาวน์โหลดของ Microsoft

คุณสามารถทำการค้นหาเหล่านี้ได้โดยใช้ PowerShell PowerShell มีอยู่แล้วเป็นคุณสมบัติที่ติดตั้งได้สำหรับ Server 2008, 2008 R2 และ Windows 7 แต่คุณจะต้องดาวน์โหลด WinRM Frameworkเพื่อติดตั้งลงบน XP หรือ Vista

ได้รับการเข้าถึง cmdlets AD-ที่เฉพาะเจาะจงใด ๆ ใน PowerShell คุณจะยังจำเป็นต้องดำเนินการอย่างน้อยหนึ่งของการติดตั้งต่อไปนี้:

  • สำหรับ Win 7 และลูกค้า 2008 R2 คุณสามารถติดตั้งเครื่องมือผู้ดูแลระบบเซิร์ฟเวอร์ระยะไกล RSAT ยังต้องว่าคุณได้ติดตั้งของ Active Directory Web Services มีบนServer 2008 R2ควบคุมโดเมนหรือบริการเกตเวย์ของ Active Directory จัดการสำหรับเซิร์ฟเวอร์ 2003/2008 พล
  • สำหรับ XP ใด ๆ หรือลูกค้าที่สูงขึ้น, ดาวน์โหลดและติดตั้งเชลล์การจัดการเควส ActiveRoles สำหรับ Active Directory เครื่องมือ Quest ไม่ต้องการการเปลี่ยนแปลงเพิ่มเติมใด ๆ ใน DC ของคุณ

ผมใช้แบบสอบถามเป็นครั้งแรกตลอดเวลา
จิม B

1
ระวังให้ดีว่าคุณจะต้องรันคำสั่งนี้บนตัวควบคุมโดเมน
skolima

9
คุณไม่จำเป็นต้องเรียกใช้คำสั่งนี้บนตัวควบคุมโดเมน แต่คุณไม่จำเป็นต้องมีการติดตั้งดูแลระบบสนับสนุนแพ็ค .msi ซึ่งรวมอยู่ในเครื่องมือสนับสนุนบนเซิร์ฟเวอร์ซีดีรอม Windows 2003 หรือดาวน์โหลดได้จากmicrosoft.com/downloads/en/…
Ryan Fisher

24

สำหรับโซลูชัน PowerShell ที่ไม่ต้องใช้ Add-in ของ Quest AD ให้ลองทำดังต่อไปนี้

Import-Module ActiveDirectory

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

สิ่งนี้จะระบุกลุ่มที่ซ้อนกันเช่นกัน หากคุณไม่ต้องการทำเช่นนั้นให้ถอดสวิตช์-recursive


6
คุณถูกต้องว่าโมดูล ActiveDirectory ไม่จำเป็นต้องมี Quest ActiveRoles AD snap-in แต่ต้องการให้คุณติดตั้งเครื่องมือ RSAT และโฆษณาของคุณมี DC อย่างน้อยหนึ่งตัวที่มี Active Directory Web Service (สำหรับปี 2008 R2) หรือบริการเกตเวย์การจัดการไดเรกทอรีที่ใช้งานอยู่ (สำหรับ 2003, 2008 DCs) ติดตั้ง ดูคำตอบของฉันด้านบนสำหรับรายละเอียดและลิงค์
Ryan Fisher

16

วิธีที่ง่ายมากที่ทำงานบนเซิร์ฟเวอร์และลูกค้า:

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

ส่งคืน 1 หากผู้ใช้อยู่ในกลุ่ม YOURGROUPNAME มิฉะนั้นจะส่งคืน 0

จากนั้นคุณสามารถใช้ค่า% ERRORLEVEL% (0 ถ้าผู้ใช้ในกลุ่ม 1 ถ้าไม่) ชอบ

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

1
คำสั่ง "กลุ่มสุทธิ" ค้นหาเฉพาะโดเมน (หรือโครงสร้างโดเมน) ที่เข้าร่วมคอมพิวเตอร์ ทางเลือกที่ทันสมัยกว่าคือ: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT


7

คำตอบที่ใช้ที่นี่dsgetและdsqueryจะทำงานเฉพาะกับ Windows รุ่นเซิร์ฟเวอร์เนื่องจากคำสั่งเหล่านั้นไม่ได้จัดส่งใน Windows รุ่นอื่น (เช่น Windows 7) บนเครื่องโดยไม่ต้องคำสั่งเหล่านั้นคุณจะได้รับข้อมูลที่คุณต้องการโดยใช้คำสั่ง adfind

นี่คือตัวอย่างแบบสอบถามสำหรับการเป็นสมาชิกกลุ่ม:

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

4
ADFind.exe เป็นเครื่องมือของบุคคลที่สามที่คุณต้องติดตั้งต่อไป คำสั่ง ds * สามารถติดตั้งผ่านชุดเครื่องมือผู้ดูแลระบบ
Ryan Fisher

4

วิธีแสดงรายการกลุ่มท้องถิ่นและผู้ใช้

ใช้สคริปต์ powershell ต่อไปนี้เพื่อแสดงรายการกลุ่มโลคัลและสมาชิกของกลุ่มเหล่านั้น

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

คัดลอกข้อความข้างต้นใน Notepad filename.ps1และบันทึกเป็น จากนั้นเรียกใช้ไฟล์ ฉันควรแสดงกลุ่มและผู้ใช้ในแต่ละกลุ่มหรือคุณสามารถเรียกใช้จาก PowerShell


ฉันได้รับcmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:จากนั้นจึงขอข้อมูลเข้าProcess[0]
Mike S

3

สำหรับสมาชิกแสดงUserGroup1ลอง:

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

1
อาจต้องการชี้ให้เห็นว่ายูทิลิตี้ CLI ใดที่คุณต้องการใช้สิ่งนี้ฉันไม่คิดว่ามันจะทำงานได้ดีcmdด้วยเหตุผลบางอย่าง
HopelessN00b

@ HopelessN00b: ใช้งานได้ใน cmd
Pete

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

@ HopelessN00b: ฉันได้รับข้อผิดพลาดหากไม่มี UserGroup1 ลองใช้งานบางอย่างเช่น "Accounting *"
Pete
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.