You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Novell.Directory.Ldap.NETStandard从AD获取超1000条结果

解决Novell.Directory.Ldap.NETStandard获取AD超过1000条结果的问题

嘿,这个AD的1000条结果限制确实挺闹心的!我之前用Novell的LDAP库也碰到过一模一样的问题,其实只要开启分页搜索就能搞定——AD的这个限制本质上是强制要求用分页来获取大量结果,避免一次性返回数据过多导致性能问题。

原理说明

AD默认会限制单次搜索的结果数量(通常是1000条),Novell的LDAP库支持通过设置PagingSize属性启用分页搜索,启用后库会自动帮你分批次请求结果,直到获取所有符合条件的数据。

修改你的代码

你只需要在LdapSearchConstraints里添加PagingSize配置即可,建议设置为1000(刚好匹配AD的默认限制,也可以根据需求设更小的值比如500)。修改后的完整代码如下:

// 关键修改:添加PagingSize属性启用分页,MaxResults设为0表示获取所有结果
LdapSearchConstraints constraints = new LdapSearchConstraints 
{ 
    MaxResults = 0,
    PagingSize = 1000 // 每页获取1000条,和AD默认限制对齐
};

LdapSearchQueue queue = connection.Search(
    "<your base entry>", 
    LdapConnection.SCOPE_SUB, 
    "<your filter>", 
    attr, 
    false, 
    null, 
    constraints
);

LdapMessage message;
while ((message = queue.getResponse()) != null)
{
    if (message is LdapSearchResult searchResult)
    {
        LdapEntry entry = searchResult.Entry;
        LdapAttributeSet attributeSet = entry.getAttributeSet();
        var samAccountNameAttr = attributeSet.getAttribute("sAMAccountName");
        // 增加空值判断,避免部分AD对象无该属性导致报错
        if (samAccountNameAttr != null)
        {
            list.Add(samAccountNameAttr.StringValue);
        }
    }
    // 无需额外处理分页引用消息,库会自动完成后续分页请求
}

额外注意事项

  • PagingSize取值建议:不要超过AD服务器设置的最大分页大小(默认1000),如果设得更大,AD会自动截断为它允许的最大值。
  • 权限检查:确保你的LDAP连接账号有执行分页搜索的权限(普通用户一般默认拥有该权限,受限账号需要额外确认)。
  • 空属性防护:代码里加了属性空值判断,避免部分AD对象(比如计算机账号、组账号)没有sAMAccountName属性导致空引用异常。

这样修改后,你的代码就能突破1000条的限制,获取到所有符合搜索条件的AD对象啦!

内容的提问来源于stack exchange,提问作者Денис Бабушкин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:30:56