модуль активного каталога python pyad max вернул членов группы - PullRequest
0 голосов
/ 02 июля 2019

Как я могу вернуть всех членов группы, если это больше 1500, я использую код ниже Использование атрибута члена execute_query в группе пусто

import pyad.adquery
q = pyad.adquery.ADQuery()
q.execute_query(
attributes = ["CN", "sAMAccountName", "sAMAccountType", "name", "title", "distinguishedName", "mail", "managedBy", "member", "memberOf"][::-1],
where_clause = "{0} = '{1}'".format(query_attribute,query_value),
base_dn = "DC=domain,DC=company,DC=net",
)  --> Using execute_query member attribute is empty

result = list(q.get_results())[0]['member'] --> result is None

с использованием pyad.from_cn только первые 1500 пользователей вернули

f = pyad.pyad.from_cn('Group Name')
f.get_attribute('member') or f.get_members()  --> both return only 1500 Users

1 Ответ

1 голос
/ 02 июля 2019

Этот предел исходит не от pyad, а от самого AD. Active Directory выдаст вам только 1500 строк из многозначного атрибута. Чтобы получить остальное, нужно специально попросить больше.

Я не пробовал это в Python, но чтобы запросить следующие 1500, вы должны быть в состоянии сделать что-то вроде этого:

f.get_attribute('member;range=1500-*')

Попробуйте и посмотрите, работает ли оно.

Глядя на исходный код Pyad , может на самом деле не работать (из-за проверки hasattr, которая может не удалить часть «range» при проверке, если атрибут является действительным). Для этого также зарегистрирована проблема , на которую не было получено ответа. А поскольку проект больше не поддерживается , он вряд ли будет исправлен, если вы его не разветвите и не исправите (это должно быть так же просто, как снять проверку hasattr).

Но если это действительно сработает, вам придется поместить это в цикл и продолжать, пока не получите ошибку, что означает, что больше нет результатов. У меня есть пример в C # здесь . Вы можете перевести логику в цикле на Python.

...