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

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

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

#1 楼

试试

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


评论


您可能需要做更多的工作才能解析嵌套组中的成员和重复成员。

–duffbeer703
09年8月9日在20:49

dsget组“ CN = GroupName,DC = domain,DC = name,DC = com” -members -expand为您提供嵌套组中的成员,尽管它可能对重复项没有帮助,并且为您提供了完整的AD查询字符串成员,而不仅仅是他们的CN。

– jonnybot
2014年7月1日在19:08

在Win7 SP1上找不到命令。我猜您需要安装RSAT吗?

– Iszi
2014年11月12日19:54

无法将“ dsget”识别为内部或外部命令等。

–道地蒜
2015年11月25日在9:56

@adolfgarlic-stackoverflow.com/questions/8514599/…

–照看孩子的人
17年7月19日在19:24

#2 楼

这是命令提示符下的另一种方法,虽然由于必须分析输出,所以不确定其自动化程度:

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

net group <your_groupname> /domain


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

net localgroup <your_groupname> /domain


评论


不知道为什么不赞成这样做……输出可能需要一点解析,但是它的优点是仅依赖于基本Windows安装中的实用程序。

– G-Wiz
2011年7月14日在16:07

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

–deed02392
13-10-14在11:19

这很棒!工作了请客。

– WOPR
2015年5月11日在6:26

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

–马克
15年6月19日在20:05

这对我来说非常有效(并且与网络用户/ domain很好地配合使用)。谢谢!

– xan
16 Mar 23 '16 at 20:05

#3 楼

这是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还需要至少执行以下安装之一:对于Win 7和2008 R2客户端,您可以安装远程服务器管理工​​具。 RSAT还要求您在Server 2008 R2域控制器上安装了Active Directory Web服务功能,或在任何Server 2003/2008 DC上安装了Active Directory管理网关服务。
对于任何XP或更高版本的客户端,请下载并安装用于Active Directory的Quest ActiveRoles命令行管理程序。 Quest工具不需要对DC进行任何其他更改。


评论


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

– Jim B
09年8月3日在20:29

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

– Skolima
2011-3-24在11:49

您不必在域控制器上运行此命令。但是,您确实需要安装Windows 2003 Server CDROM上的“支持工具”中包含的Admin Support Pack .msi。或从microsoft.com/downloads/en/…下载它

– Ryan Fisher
2011-3-24 15:50

#4 楼

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

Import-Module ActiveDirectory

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


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

评论


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

– Ryan Fisher
2011年10月11日19:36

#5 楼

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

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


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

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

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


评论


“ net group”命令仅搜索连接计算机的域(或域树)。一个更现代的替代方法是:whoami / groups |找到/ I / C“ YOURGROUPNAME”

– DavisNT
15年9月15日在17:04

#6 楼

使用PowerShell和Quest Software的Active Directory免费ActiveRoles命令行管理程序,可以使用:

(Get-QADGroup“ GroupName”)。成员

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

评论


另外:Get-QADGroupMember'GroupName'

–戈登·贝尔
2012年8月9日15:13

看起来Quest的AD工具现在可能已失效,并且该链接当前已重定向到名为Active Roles的付费产品的oneidentity.com/products/active-roles

– KyleMit
20 May 14 '19:41

哦,真糟糕。持续的时间很好。

–戈登·贝尔
20年5月19日在19:11

#7 楼

使用dsgetdsquery的答案仅适用于Windows服务器版本,因为其他版本的Windows(例如Windows 7)未附带这些命令。在没有这些命令的计算机上,您可以使用AdFind命令获得所需的信息。

以下是获取组成员身份的示例查询:

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


评论


ADFind.exe是您仍然必须安装的第三方工具。 ds *命令可通过管理工具包安装。

– Ryan Fisher
2011年10月11日19:37

#8 楼

如何列出本地组和用户?

使用以下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来运行它。

评论


我在命令管道位置1获得cmdlet ForEach-Object。为以下参数提供值:然后在输入中请求Process [0]

– Mike S
16 Mar 18 '16 at 13:55

#9 楼

对于UserGroup1的显示成员,请尝试:

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


评论


可能想指出要在其中使用什么CLI实用程序。出于某些原因,我认为cmd不能很好地发挥作用。

–HopelessN00b
2012年10月10日9:01

@ HopelessN00b:这在cmd中有效

– Pete
2012年11月7日在20:42

@Pete Newp! dsget失败:“此命令的目标对象”丢失。

–HopelessN00b
2012年11月7日20:53



@ HopelessN00b:如果UserGroup1不存在,我会收到错误消息,请尝试使用“ Accounting *”

– Pete
2012年11月7日在21:48