Gre*_*han 4 windows active-directory ldap
这是到目前为止不起作用的内容;
(&(objectCategory=Person)(objectClass=Group)(CN=group_in_question))
(&(objectClass=Group)(objectCategory=Group)(member=CN=group_in_question))
(&(samAccountName=%USERNAME%)(memberof=CN=group_in_question))
(&(objectCategory=person)(objectClass=user)(memberOf=cn=group_in_question,ou=Groups,dc=mydomain,dc=com))
这种类型的查询需要考虑以下几点:
如果您的查询必须搜索大型用户数据库,则应始终包含“(ObjectCategory=person)”。您想这样做有几个原因。ObjectCategory 是一个索引属性,而 objectClass 不是,这将显着提高您在大型 AD 数据库上的查询速度。此外,同时使用 objectCategory 和 objectClass 属性将防止在您的查询中返回“联系人”对象。
如果您的结果集将返回 1000 个以上的结果,您需要注意性能问题。在 ADUC GUI 中,您可以通过“选项”对话框更改 2000 个项目的限制,增加会显着减慢您的查询速度。如果您打算使用 VBScript 并枚举 GetObject 结果,对于大型组,这也将非常非常慢。对于 Quest Powershell cmdlet,您需要包含“-sizelimit”参数以覆盖 1000 项限制:
get-qadgroupmember somegroup -sizelimit 0
Run Code Online (Sandbox Code Playgroud)
如果您使用代码(VBScript、JScript、.Net)创建连接对象并向其添加 LDAP 查询,则需要在连接对象上设置“.pageSize”属性以获取分页结果,因为默认值为不返回分页结果,而是将其限制为 1000 个项目。我通常将 .pageSize 设置为 1000,因为这是最大值。
扩展嵌套组是一个棘手的问题。获取嵌套组信息的最简单方法是使用 Quest Powershell cmdlet:
get-qadgroupmember somegroup -indirect -sizelimit 0
Run Code Online (Sandbox Code Playgroud)
从 VBscript/JScript 脚本中,您可以使用“GetObject”并枚举成员集合,测试每个成员的“用户或组”,然后递归到嵌套组中。这很慢,您不应该这样做,除非作为 VBScript 编程练习。
最终,您可能希望学习通过直接 LDAP 查询来完成此操作。这是通过LDAP_MATCHING_RULE_IN_CHAIN操作符完成的。此运算符可能难以使用,如果您的组具有深层嵌套结构,它在 DC 上可能非常昂贵。这种方法的好处是对于非常大的组(默认情况下超过 1500 名成员),您将能够对属于该组成员的用户(甚至是间接的)进行查询,而不是检索该组并尝试读取成员属性(必须以“大型”组的特殊方法处理。即,您会得到一份用户对象的报告,比您尝试读取大型属性数组的单个组对象的比率高。
(&(objectCategory=person)(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=(cn=Group1,OU=groupsOU,DC=x)))
Run Code Online (Sandbox Code Playgroud)
如果您在处理“大型”组时遇到问题,您还可以增加 AD 在限制对 .member 属性的访问时使用的限制。
归档时间: |
|
查看次数: |
52405 次 |
最近记录: |