【问题标题】:Python: how to get emails of Active Directory group members?Python:如何获取 Active Directory 组成员的电子邮件?
【发布时间】:2019-08-05 09:07:45
【问题描述】:

我正在尝试获取 Active Directory 的所有组成员。

我有这个代码:

    from ldap3 import Server, Connection, ALL, core

    server = Server(address, get_info=ALL)
    ad_conn = Connection(server, dn, password, auto_bind=True)
    members = []
    AD_GROUP_FILTER = '(&(objectClass=GROUP)(cn={group_name}))'
    ad_filter = AD_GROUP_FILTER.replace('{group_name}', group_name)
    result = ad_conn.search_s('OU details', ldap3.SCOPE_SUBTREE, ad_filter)
    if result:
        if len(result[0]) >= 2 and 'member' in result[0][1]:
            members_tmp = result[0][1]['member']
            for m in members_tmp:
                email = get_email_by_dn(m, ad_conn)
                if email:
                    members.append(email)
    return members

但我收到一个错误

'Connection'对象没有属性'search_s'

【问题讨论】:

  • 我不确定search_s()是否真的存在,你的意思是'_s'的'同步',在这种情况下是意图进行同步调用吗?跨度>

标签: python active-directory ldap


【解决方案1】:

使用search(),指定您需要的属性(似乎您从用户 dn 构建“电子邮件”,但如果它存在于目录中),并修复函数调用中的参数(arg. order filter 然后范围,加上使用正确的常量SUBTREE) :

from ldap3 import Server, Connection, ALL, core

server = Server(address, get_info=ALL)
ad_conn = Connection(server, dn, password, auto_bind=True)
members = []
AD_GROUP_FILTER = '(&(objectClass=GROUP)(cn={group_name}))'
ad_filter = AD_GROUP_FILTER.replace('{group_name}', group_name)    

ad_conn.search('OU details', ad_filter, ldap3.SUBTREE, attributes=['member', 'mail'])

if len(ad_conn.response): 
    # To grab data, you might prefer the following - or use ad_conn.entries : 
    for entry in ad_conn.response:
        print(entry['dn'], entry['attributes'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多