列出Windows Active Directory组中用户的命令行?


136

是否有命令行方式列出特定Active Directory组中的所有用户?

通过转到管理计算机 -> 本地用户/组 -> ,然后双击该组,可以看到谁在该组中。

我只需要一种命令行方式即可检索数据,因此我可以执行其他一些自动化任务。

Answers:


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 2014年

11
“DSGET”不被识别为内部或外部的命令,等等。
阿道夫大蒜


237

这是命令提示符下的另一种方式,虽然由于必须解析输出,所以不确定如何自动化:

如果组是“全局安全组”:

net group <your_groupname> /domain

如果您正在寻找“域本地安全组”:

net localgroup <your_groupname> /domain

23
不知道为什么会拒绝...输出可能需要一点解析,但是它的优点是仅依赖于基本Windows安装中的实用程序。
G-Wiz

2
但是,被截断的组名周围有什么办法吗?
deed02392

1
这很棒!工作了请客。
WOPR

2
请注意,这不是递归的,也不列出组中的组。如果您有嵌套或分层组,则不会很有帮助。
2015年

这对我来说非常有效(并与完美地结合在一起net user /domain)。谢谢!
xan 2016年

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上。

为了访问在PowerShell中任何特定的AD-的cmdlet,您将ALSO需要执行以下安装的至少一个:


我一直都在使用第一个查询
Jim B

1
请注意,您必须在域控制器上运行此命令。
skolima 2011年

9
不必在域控制器上运行此命令。但是,你不要需要安装包含在在Windows 2003服务器光盘的支持工具管理支持包的.msi。或从microsoft.com/downloads/en/…
Ryan Fisher

24

对于不需要Quest AD加载项的PowerShell解决方案,请尝试以下操作

Import-Module ActiveDirectory

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

这还将枚举嵌套的组。如果您不想这样做,请删除-recursive开关。


6
您是正确的,ActiveDirectory模块不需要Quest ActiveRoles AD管理单元,但是它确实需要安装RSAT工具,并且AD至少具有一个带有Active Directory Web Service的DC(用于2008) R2)或Active Directory管理网关服务(用于2003、2008 DC)。有关详细信息和链接,请参见上面的答案。
瑞安·费舍尔

16

在服务器和客户端上工作的非常简单的方法:

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

如果用户在YOURGROUPNAME组中,则返回1,否则将返回0

然后,您可以使用%ERRORLEVEL%值(如果组中的用户为0,否则为1)

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

1
“ net group”命令仅搜索连接计算机的域(或域树)。一个更现代的替代方法是: 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 *命令可通过管理工具包安装。
瑞安·费舍尔

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
}

将上面的文本复制到记事本中并另存为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 2012年

@ HopelessN00b:这在cmd中有效
Pete

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

@ HopelessN00b:如果UserGroup1不存在,我会收到错误消息,请尝试“ Accounting *”之类的方法
Pete
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.