如何使用ldapsearch获取Active Directory所有组及其中的启用用户
如何用ldapsearch获取AD组并仅保留组内启用用户?
你之前的查询逻辑有误——把针对用户状态的userAccountControl过滤条件用在了组对象上,组的userAccountControl属性和用户的启用/禁用状态无关,自然无法达到预期效果。
AD的LDAP查询无法通过单次组查询直接过滤掉组内的禁用成员(因为组的member属性仅存储用户DN,不附带用户状态信息),可以通过以下两种方式实现需求:
方法一:分两步查询(先取组,再查每组的启用用户)
- 先获取所有目标AD组(可排除系统关键组):
ldapsearch -x -D "cn=你的管理员账号,dc=域名,dc=com" -W -b "dc=域名,dc=com" "(&(objectClass=group)(!(isCriticalSystemObject=TRUE)))" dn
该命令会返回所有非系统关键组的DN,方便后续逐个查询组内用户。
- 针对每个组DN,查询组内的启用用户:
ldapsearch -x -D "cn=你的管理员账号,dc=域名,dc=com" -W -b "dc=域名,dc=com" "(&(objectCategory=person)(objectClass=user)(sAMAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(memberOf:1.2.840.113556.1.4.1941:=<组DN>))"
这里使用memberOf:1.2.840.113556.1.4.1941:(LDAP链式匹配规则),可以精准查询属于目标组的启用用户。
方法二:反向查询(先取启用用户,再关联所属组)
如果需要整理“组-启用用户”的对应关系,也可以先查询所有启用用户,同时获取他们的所属组属性:
ldapsearch -x -D "cn=你的管理员账号,dc=域名,dc=com" -W -b "dc=域名,dc=com" "(&(objectCategory=person)(objectClass=user)(sAMAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" sAMAccountName memberOf
之后可以通过脚本(比如Python、Shell脚本)将查询结果整理为每个组对应的启用用户列表。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

