python活动目录模块pyad max返回了组成员

时间:2019-07-02 14:09:15

标签: python active-directory pyad

如果组成员超过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

仅使用前1500位用户使用pyad.from_cn

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

1 个答案:

答案 0 :(得分:1)

此限制不是来自pyad,而是来自广告本身。 Active Directory将仅从多值属性为您提供1500行。要获得剩下的,您必须明确要求更多。

我还没有在Python中尝试过此方法,但是要获得下一个1500,您应该可以执行以下操作:

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

尝试一下,看看是否可行。

看着Pyad source code,可能可能实际上不起作用(由于hasattr的检查,检查属性是否为hasattr可能不会删除“范围”部分有效)。还有an issue logged for this,尚未回复。而且自project is no longer maintained起,除非您自行分叉并对其进行修复,否则不太可能得到修复(这与删除Uri检查一样容易)。

但是,如果确实发生了这种情况,则必须将其放入循环并继续进行,直到出现错误为止,这意味着不再有结果。我在C#here中有一个示例。您可以将循环中的逻辑转换为Python。