【问题标题】:python active directory module pyad max returned group memberspython活动目录模块pyad max返回组成员
【发布时间】:2019-07-02 14:09:15
【问题描述】:

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

【问题讨论】:

    标签: python active-directory pyad


    【解决方案1】:

    这个限制不是来自pyad,而是来自AD本身。 Active Directory 只会为您提供来自多值属性的 1500 行。要获得其余的,您必须专门要求更多。

    我没有在 Python 中尝试过这个,但是要要求下一个 1500,你应该可以这样做:

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

    试试看它是否有效。

    查看Pyad source code可能实际上不起作用(因为hasattr 检查,在检查属性是否有效时可能不会删除“范围”部分)。还有an issue logged for this,还没回复。自从project is no longer maintained 以来,除非你分叉并自己修复它,否则它不太可能得到修复(它应该像删除hasattr 检查一样简单)。

    但如果这确实有效,您将不得不将其放入循环中并继续执行,直到出现错误,这意味着没有更多结果。我在 C#here 中有一个示例。您可以将循环中的逻辑转换为 Python。

    【讨论】:

    • 谢谢,我找不到返回的查询具有此属性成员范围,我能够通过反转查询来获取所有用户,通过查询具有该组成员 where_clause = "{0 } = '{1}'".format('memberof','组名')
    • 作品也是如此!这对您来说可能无关紧要,但如果您的环境有多个域,您可能无法获得预期的所有结果。更多信息在这里:Beware of memberOf
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多