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

.NET Core 3.1使用Novell.Directory.Ldap无法获取全部LDAP用户

解决Novell.Directory.Ldap.NETStandard获取AD用户时的“大小限制超出”问题

问题原因

当前代码未启用LDAP分页搜索,尽管AD的MaxPageSize设为5000,但客户端未配置分页的情况下,AD会返回默认结果数量限制(通常在1000条以内,具体取决于域控配置),导致无法获取全部4000+用户,同时触发“大小限制超出”错误。

解决方案

修改代码启用LDAP分页搜索,通过LdapSearchConstraints配置分页参数:

var ldapConn = new LdapConnection { SecureSocketLayer = false };
ldapConn.Connect(domainName, 389);
ldapConn.Bind(username, password);

// 配置分页搜索约束,设置页大小(建议不超过AD的MaxPageSize)
var searchConstraints = new LdapSearchConstraints();
searchConstraints.SetPaging(1000); // 每页获取1000条,可根据实际调整

ILdapSearchResults lsc = ldapConn.Search(
    "OU=myOU,DC=domain,DC=com",
    LdapConnection.ScopeSub,
    "(objectClass=person)",
    null,
    false,
    searchConstraints); // 传入分页约束

CSV WriteToCSV = new CSV();
while (lsc.HasMore())
{
    try
    {
        var nextEntry = lsc.Next();
        LdapAttributeSet attributeSet = nextEntry.GetAttributeSet();
        if (attributeSet.ContainsKey("sAMAccountName"))
        {
            string result = attributeSet.GetAttribute("sAMAccountName").StringValue;
            WriteToCSV.WriteToCsv("Persons.csv", result); // 补充原代码缺失的参数
        }
    }
    catch (LdapException ex)
    {
        // 分页触发的SIZE_LIMIT_EXCEEDED属于正常机制,无需终止程序
        if (ex.ResultCode != LdapException.SIZE_LIMIT_EXCEEDED)
        {
            throw;
        }
    }
}

// 完成后关闭连接
ldapConn.Disconnect();

关键说明

  • SetPaging(int pageSize):设置每页返回的条目数,建议设为小于等于AD的MaxPageSize(此处为5000),比如1000,避免单次请求数据量过大。
  • 异常处理:分页过程中触发的SIZE_LIMIT_EXCEEDED异常是分页的正常触发逻辑,只需捕获后跳过,继续循环即可获取下一页数据。
  • 原代码中WriteToCSV.WriteToCsv("Persons.csv",);存在语法错误,需补充要写入的参数(如上述代码中的result)。

内容的提问来源于stack exchange,提问作者marah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:38:19