如何获取未禁用的活动目录组成员列表(不使用 PowerShell?)

如何获取未禁用的活动目录组成员列表(不使用 PowerShell?)

我正在尝试获取未禁用的 Active Directory 组成员用户列表。到目前为止,我能找到的最好的结果是:

dsquery group -name "Group name" | dsget group -members -expand  | dsget user -samid -disabled -c | findstr /c:" no "

...承认最后的“findstr”完全是黑客行为(不幸的是,它还删除了列标题。)

我已经能够找到以下 dsquery 命令,它提供所有非禁用用户的列表:

dsquery * -filter "(&(sAMAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" -limit 0 | dsget user -samid -c

...但添加memberOf参数仅适用于用户直接所属的组;它不会像 那样dsget group递归-expand

那么有没有办法将它们结合起来,或者让 dsquery 递归,或者我在不使用 PowerShell 的情况下已经做到了极致?(我不能这样做,因为它的工具依赖于 Active Directory Web 服务,而至少从 Samba 4.9.5 开始,基于 Samba 的域控制器上不存在该服务。)

答案1

这个语法对我有用。它使用LDAP_MATCHING_RULE_IN_CHAIN规则 OID(1.2.840.113556.1.4.1941)检查对象的完整祖先:

dsquery * domainroot -limit 0 -r -filter "(&(objectCategory=user)(memberOf:1.2.840.113556.1.4.1941:=CN=Group Name,OU=Security Groups,DC=domain,DC=com)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"

确保将示例 distinguishedName 字符串 (memberOf=CN=Group Name,OU=Security Groups,DC=domain,DC=com) 替换为您要查询递归成员资格的组的 DN。

此查询返回组中每个已启用用户的 DN。如果您特别想获取 sAMAccountName 和国家/地区,请使用:

dsquery * domainroot -limit 0 -r -filter "(&(objectCategory=user)(memberOf:1.2.840.113556.1.4.1941:=CN=Group Name,OU=Security Groups,DC=domain,DC=com)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" -attr sAMAccountName co

相关内容