ldap3 python搜索组成员并检索其sAMAcountName(Active Directory)

2024-05-16 01:51:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用ldap3和python检索组成员,并检索他们的sAMAccountName,因为我们已经混合了DN(一些带有NTID,另一些带有名字/姓氏)。

我一直在尝试这个,没有任何运气,任何帮助将不胜感激:

from ldap3 import Server, Connection, AUTO_BIND_NO_TLS, SUBTREE, BASE,
      ALL_ATTRIBUTES, ObjectDef, AttrDef, Reader, Entry, Attribute,
      OperationalAttribute import ldap3

conn = Connection(Server('adserver.com', port=389, use_ssl=False),
                  auto_bind=AUTO_BIND_NO_TLS, user='DOMAIN\\\NTID',
                  password='somepassword')

conn.search(search_base='CN=GROUPNAME,OU=Groups,OU=Resources,OU=Global,DC=adserver.com',
            search_filter='(objectCategory=person)', search_scope=SUBTREE,
            attributes = ['sAMAAccountName'], size_limit=0) 

print(conn.response_to_json())

Tags: noimportcomautosearchserverbindtls
2条回答

在搜索成员之前,必须先从组本身下拉成员列表。

conn.search(
    search_base='CN=GROUPNAME,OU=Groups,OU=Resources,OU=Global,DC=adserver.com',
    search_filter='(objectClass=group)',
    search_scope=SUBTREE,
    attributes = ['member']
)

for entry in conn.entries:
    print(entry.member.values)

这将以可分辨名称打印出成员列表。

然后需要执行一个新的搜索,该搜索遍历每个成员并返回每个成员的sAMAccountName。

下面是完整代码的外观(可能需要调整):

conn.search(
    search_base='CN=GROUPNAME,OU=Groups,OU=Resources,OU=Global,DC=adserver.com',
    search_filter='(objectClass=group)',
    search_scope=SUBTREE,
    attributes = ['member']
)

for entry in conn.entries:
    for member in entry.member.values:
        conn.search(
            search_base='OU=Global,DC=adserver.com'',
            search_filter=f'(distinguishedName={member})',
            attributes=[
                'sAMAccountName'
            ]
        )

        user_sAMAccountName = conn.entries[0].sAMAccountName.values

        print(user_sAMAccountName)

找到的条目应该在连接对象的entries属性中。尝试使用print(conn.entries)

相关问题 更多 >