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

147 windows active-directory

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

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

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

小智 274

这是命令提示符的另一种方式,但不确定自动化程度如何,因为您必须解析输出:

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

net group <your_groupname> /domain
Run Code Online (Sandbox Code Playgroud)

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

net localgroup <your_groupname> /domain
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么这被否决了......输出可能需要一些解析,但它的优点是仅依赖于作为基本 Windows 安装一部分的实用程序。 (26认同)
  • 但是有没有办法绕过被截断的组名? (2认同)
  • 请注意,这不是递归的,也不会列出组中的组。如果您有嵌套或分层组,则不是很有帮助。 (2认同)

Rya*_*her 50

这是我发现通常更有用的 ds 命令的一个版本,特别是如果您有一个复杂的 OU 结构并且不一定知道该组的完整可分辨名称。

dsquery group -samid "Group_SAM_Account_Name" | dsget group -members -expand
Run Code Online (Sandbox Code Playgroud)

或者如果您知道组的 CN,通常与 SAM ID 相同,如果名称中有空格,请引用:

dsquery group -name "Group Account Name" | dsget group -members -expand
Run Code Online (Sandbox Code Playgroud)

如评论中所述,默认情况下 ds* 命令(dsquery、dsget、dsadd、dsrm)仅在域控制器上可用。但是,您可以从Windows Server安装介质上的支持工具安装的管理工具包或下载它从Microsoft下载站点。

您还可以使用 PowerShell 执行这些查询。PowerShell 已作为 Server 2008、2008 R2 和 Windows 7 的可安装功能提供,但您需要下载 WinRM 框架才能在 XP 或 Vista 上安装它。

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

  • 您*不必*必须在域控制器上运行此命令。但是,您*确实* 需要安装 Admin Support Pack .msi,它包含在 Windows 2003 Server CDROM 上的支持工具中。或从 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c16ae515-c8f4-47ef-a1e4-a8dcbacff8e3&amp;DisplayLang=en 下载 (9认同)

pQd*_*pQd 39

尝试

dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
Run Code Online (Sandbox Code Playgroud)

  • 'dsget' 不被识别为内部或外部命令等。 (14认同)
  • 在 Win7 SP1 上找不到命令。我猜你需要安装 RSAT? (2认同)

pk.*_*pk. 29

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

Import-Module ActiveDirectory

Get-ADGroupMember "Domain Admins" -recursive | Select-Object name
Run Code Online (Sandbox Code Playgroud)

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

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

小智 18

一种适用于服务器和客户端的非常简单的方法:

NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"
Run Code Online (Sandbox Code Playgroud)

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

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

IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE
Run Code Online (Sandbox Code Playgroud)

  • “net group”命令只搜索计算机加入的域(或域树)。一个更现代的选择是:`whoami /groups | find /I /C "YOURGROUPNAME"` (2认同)

小智 10

使用 PowerShell 和 Quest Software 的免费 ActiveRoles Management Shell for Active Directory,您可以使用:

(Get-QADGroup "GroupName"). 成员

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


mar*_*hep 7

这些问题的答案在这里使用dsget,并dsquery为这些命令的一律不发货的Windows(如Windows 7)的其他版本的Windows的服务器版本将只工作。在没有这些命令的机器上,您可以使用AdFind 命令获取所需的信息。

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

AdFind.exe -default -f name="Domain Admins" member -list
Run Code Online (Sandbox Code Playgroud)

  • ADFind.exe 是您必须安装的第三方工具。ds* 命令可通过管理工具包安装。 (4认同)