Dòng lệnh để liệt kê người dùng trong nhóm Windows Active Directory?


136

Có cách nào để liệt kê tất cả người dùng trong một nhóm Active Directory cụ thể không?

Tôi có thể xem ai là người trong nhóm bằng cách vào Quản lý máy tính -> Người dùng / nhóm cục bộ -> Nhóm và nhấp đúp vào nhóm.

Tôi chỉ cần một cách dòng lệnh để lấy dữ liệu, vì vậy tôi có thể thực hiện một số tác vụ tự động khác.

Câu trả lời:


37

thử

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

1
Bạn có thể cần phải làm nhiều hơn một chút để giải quyết các thành viên và các thành viên trùng lặp trong các nhóm lồng nhau.
duffbeer703

1
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members -expandgiúp bạn trở thành thành viên trong các nhóm lồng nhau, mặc dù điều đó có thể không giúp ích cho các bản sao và nó cung cấp cho bạn chuỗi truy vấn AD đầy đủ cho thành viên, không chỉ CN của họ.
jonnybot

2
Lệnh không tìm thấy trên Win7 SP1. Tôi đoán bạn cần cài đặt RSAT?
Iszi

11
'DSget' không được công nhận là một lệnh nội bộ hoặc bên ngoài, v.v.
adolf tỏi


238

Đây là một cách khác từ dấu nhắc lệnh, không chắc là có thể tự động như thế nào vì bạn sẽ phải phân tích cú pháp đầu ra:

Nếu nhóm là "nhóm bảo mật toàn cầu":

net group <your_groupname> /domain

Nếu bạn đang tìm kiếm "nhóm bảo mật cục bộ miền":

net localgroup <your_groupname> /domain

23
không chắc chắn tại sao điều này bị hạ cấp ... đầu ra có thể yêu cầu một chút phân tích cú pháp, nhưng nó có lợi thế là chỉ phụ thuộc vào các tiện ích là một phần của cài đặt cửa sổ cơ sở.
G-Wiz

2
Nhưng có cách nào xung quanh tên nhóm bị cắt ngắn không?
deed02392

1
Điều đó thật tuyệt! Làm việc một điều trị.
WOPR

2
Lưu ý rằng điều này không đệ quy và không liệt kê các nhóm trong một nhóm. Không hữu ích nếu bạn có các nhóm lồng nhau hoặc phân cấp.
Đánh dấu

Điều này hoạt động hoàn hảo cho tôi (và đi đôi với độc đáo net user /domain). Cảm ơn!
xan

49

Đây là một phiên bản của lệnh DS tôi thấy hữu ích hơn, đặc biệt là nếu bạn có cấu trúc OU phức tạp và không nhất thiết phải biết tên phân biệt đầy đủ của nhóm.

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

hoặc nếu bạn biết CN của nhóm, thường giống với ID SAM, được trích dẫn trong trường hợp có khoảng trắng trong tên:

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

Như đã nêu trong các bình luận, theo mặc định, các lệnh DS * (dsquery, dsget, dsadd, dsrm) chỉ khả dụng trên Bộ điều khiển miền. Tuy nhiên, bạn có thể cài đặt gói Công cụ quản trị từ Công cụ hỗ trợ trên phương tiện cài đặt Windows Server hoặc tải xuống từ trang Tải xuống của Microsoft.

Bạn cũng có thể thực hiện các truy vấn này bằng PowerShell. PowerShell đã có sẵn như là một tính năng có thể cài đặt cho Server 2008, 2008 R2 và Windows 7, nhưng bạn sẽ cần tải xuống WinRM Framework để cài đặt nó trên XP hoặc Vista.

Để có quyền truy cập vào bất kỳ lệnh ghép ngắn cụ thể nào của AD trong PowerShell, bạn C ALNG cần phải thực hiện ít nhất một trong các cài đặt sau:


Tôi sử dụng truy vấn đầu tiên mọi lúc
Jim B

1
Hãy lưu ý rằng bạn phải chạy lệnh này trên bộ kiểm soát miền.
skolima

9
Bạn KHÔNG phải chạy lệnh này trên Bộ điều khiển miền. Tuy nhiên, bạn KHÔNG cần phải có cài đặt Admin Hỗ trợ gói .msi được bao gồm trong các công cụ hỗ trợ trên máy chủ CDROM Windows 2003. Hoặc tải xuống từ microsoft.com/doads/en/
Ryan Fisher

24

Để biết giải pháp PowerShell không yêu cầu bổ trợ Quest AD, hãy thử cách sau

Import-Module ActiveDirectory

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

Điều này cũng sẽ liệt kê các nhóm lồng nhau. Nếu bạn không muốn làm như vậy, hãy loại bỏ công tắc -recursive .


6
Bạn đã đúng rằng mô-đun ActiveDirectory không yêu cầu phần đính vào Quest ActiveRoles AD, nhưng nó yêu cầu bạn phải cài đặt các công cụ RSAT và AD của bạn có ít nhất một DC với Dịch vụ web Active Directory (cho năm 2008 R2) hoặc Dịch vụ cổng quản lý Active Directory (cho các DC 2003, 2008) được cài đặt. Xem câu trả lời của tôi ở trên để biết chi tiết và các liên kết.
Ryan Fisher

16

Một cách rất dễ dàng hoạt động trên máy chủ và máy khách:

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

Trả về 1 nếu người dùng nằm trong nhóm YOUGROUPNAME, người khác sẽ trả về 0

Sau đó, bạn có thể sử dụng giá trị% ERRORLEVEL% (0 nếu người dùng trong nhóm, 1 nếu không) thích

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

1
Lệnh "nhóm mạng" chỉ tìm kiếm tên miền (hoặc cây miền) nơi máy tính được nối. Một thay thế hiện đại hơn là: whoami /groups | find /I /C "YOURGROUPNAME"
DavisNT


7

Các câu trả lời ở đây sử dụng dsgetdsquerysẽ chỉ hoạt động trên các phiên bản máy chủ của Windows vì các lệnh đó không được gửi trên các phiên bản Windows khác (ví dụ: Windows 7). Trên các máy không có các lệnh đó, bạn có thể nhận thông tin bạn muốn bằng lệnh AdFind .

Đây là một truy vấn ví dụ để có được thành viên nhóm:

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

4
ADFind.exe là một công cụ của bên thứ ba mà bạn phải cài đặt. Các lệnh DS * có thể cài đặt được thông qua gói Công cụ quản trị.
Ryan Fisher

4

Làm thế nào để liệt kê các nhóm và người dùng địa phương?

Sử dụng tập lệnh powershell sau để liệt kê các nhóm cục bộ và thành viên của các nhóm đó.

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

Sao chép văn bản trên vào notepad và lưu dưới dạng filename.ps1. Sau đó chạy tệp. Tôi nên hiển thị Nhóm và Người dùng trong mỗi nhóm hoặc bạn chỉ có thể chạy nó từ powershell.


Tôi nhận được, cmdlet ForEach-Object at command pipeline position 1. Supply values for the following parameters:và sau đó yêu cầu đầu vào,Process[0]
Mike S

3

Đối với các thành viên hiển thị của UserGroup1thử:

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

1
Có thể tôi muốn chỉ ra tiện ích CLI nào bạn sử dụng. Tôi không nghĩ rằng nó sẽ hoạt động quá tốt cmd, vì một số lý do.
HoplessN00b

@ HoplessN00b: điều này hoạt động trong cmd
Pete

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

@ HoplessN00b: Tôi gặp lỗi nếu Usergroup1 không tồn tại, hãy thử một cái gì đó như "Kế toán *"
Pete
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.