You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MS Active Directory Python插件查询用户所属AD组

使用ms-active-directory插件查询指定用户的AD组成员身份

你的核心问题是把AD对象转成字符串用正则解析——这完全没必要,而且容易出错。ms-active-directory插件返回的ADUser和ADGroup都是封装好的对象,直接访问属性就能拿到所需数据,根本不用正则硬拆字符串。

修正后的代码

from ms_active_directory import ADDomain

# 初始化域连接和用户会话
domain = ADDomain('fake_name')
session = domain.create_session_as_user('my_email', 'mypassword')

# 待查询的用户邮箱列表
target_user_emails = ['albert.einstein@email.com', 'jon.doe@email.com']
# 存储用户CN与对应筛选后组的映射
user_group_result = {}

for email in target_user_emails:
    # 通过邮箱查找用户,返回ADUser对象
    ad_user = session.find_user_by_name(email)
    if not ad_user:
        print(f"未找到邮箱对应的用户: {email}")
        continue
    
    # 直接从ADUser对象获取CN属性
    user_cn = ad_user.cn
    # 查询该用户所属的所有组,返回结构为 {用户CN: [ADGroup对象列表]}
    user_all_groups = session.find_groups_for_users(users=[user_cn])[user_cn]
    
    # 筛选出以'awsg'开头的组,提取组的CN名称
    filtered_awsg_groups = [group.cn for group in user_all_groups if group.cn.lower().startswith('awsg')]
    user_group_result[user_cn] = filtered_awsg_groups

# 输出结果
for user_cn, groups in user_group_result.items():
    print(f"用户 {user_cn} 所属的awsg前缀组: {groups}")

关键修正点说明

  1. 放弃正则解析字符串:
    之前用正则从str(add_user_found)里抠CN的做法完全多余,find_user_by_name返回的ADUser对象直接提供了.cn属性,一步就能拿到通用名。
  2. 正确处理组查询结果:
    find_groups_for_users返回的是字典,键是用户的标识符(这里用CN),值是该用户所属的ADGroup对象列表。直接遍历列表,通过group.cn获取组名,再做前缀筛选即可。
  3. 容错处理:
    增加了用户未找到的判断,避免空对象导致的报错。

可选扩展

如果需要获取组的完整LDAP路径(比如CN=awsg-dev,OU=Groups,DC=domain,DC=com),可以把group.cn改成group.distinguishedName。

内容的提问来源于stack exchange,提问作者Mr. Jett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:42:49