是否有命令行方式可以列出特定 Active Directory 组中的所有用户?
我可以去查看谁在群里管理计算机-->本地用户/组-->群组并双击该组。
我只需要一种命令行方式来检索数据,这样我就可以做一些其他自动化任务。
答案1
尝试
dsget group "CN=GroupName,DC=domain,DC=name,DC=com" -members
答案2
这是命令提示符的另一种方法,但不确定其自动化程度如何,因为您必须解析输出:
如果组是“全局安全组”:
net group <your_groupname> /domain
如果您正在寻找“域本地安全组”:
net localgroup <your_groupname> /domain
答案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 框架在 XP 或 Vista 上安装它。
要访问 PowerShell 中任何特定于 AD 的 cmdlet,您需要还需要执行以下至少一项安装:
- 对于 Win 7 和 2008 R2 客户端,您可以安装远程服务器管理工具. RSAT 还需要你已经在你的服务器 2008 R2域控制器,或Active Directory 管理网关服务对于任意服务器 2003/2008 DC。
- 对于任何 XP 或更高版本的客户端,下载并安装Quest ActiveRoles 管理外壳(适用于 Active Directory)。Quest 工具不需要对您的 DC 进行任何额外更改。
答案4
一种在服务器和客户端上都有效的非常简单的方法:
NET GROUP "YOURGROUPNAME" /DOMAIN | find /I /C "%USERNAME%"
如果用户在 YOURGROUPNAME 组中则返回 1,否则返回 0
然后,您可以使用 %ERRORLEVEL% 值(如果用户在组中则为 0,否则为 1),例如
IF %ERRORLEVEL%==0 NET USE %LOGONSERVER%\YOURGROUPSHARE