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

如何通过LDAP filter获取AD中MaxPageSize之后的用户?

如何通过LDAP分页导入AD中超出MaxPageSize的用户

当然可以搞定这个问题!你遇到的是AD查询里常见的MaxPageSize限制问题,要获取后续页的用户,核心是用LDAP的分页查询控制(Paged Results Control),这是专门用来突破单页条目限制的标准方案,完全能分批拿到1001-2000、2001-3000等后续页的用户,不会重复获取前1000条。

核心逻辑

AD的MaxPageSize只是限制单次请求返回的最大条目数,而分页查询机制允许我们把整个用户结果集拆分成多个“页”来获取:

  1. 第一次请求时,告诉AD你要分页,指定每页大小(建议设为1000,和MaxPageSize匹配效率最高);
  2. AD返回第一页的1000条用户,同时返回一个分页cookie(一段标识当前读取位置的二进制数据);
  3. 下一次请求时带上这个cookie,AD就会自动返回下一页的内容;
  4. 重复这个流程,直到AD返回的cookie为空,说明所有用户都已经获取完毕。

具体实现方式

1. 使用PowerShell(最简单的方式)

PowerShell的Get-ADUser cmdlet已经内置了分页处理,你不需要手动管理cookie,直接执行命令就能获取所有用户:

# 获取所有AD用户,自动分页处理
Get-ADUser -Filter * -PageSize 1000 | Select-Object Name, SamAccountName

如果需要获取更多用户属性,只需添加-Properties参数:

Get-ADUser -Filter * -PageSize 1000 -Properties EmailAddress, LastLogonDate

2. 自定义代码实现(以C#为例)

如果是自己开发工具,需要手动配置分页控制,但大部分LDAP库都会帮你自动管理cookie:

using System.DirectoryServices;

var domainEntry = new DirectoryEntry("LDAP://yourdomain.com");
var searcher = new DirectorySearcher(domainEntry)
{
    Filter = "(objectClass=user)",
    PageSize = 1000, // 每页1000条,和MaxPageSize一致
    PropertiesToLoad = { "samaccountname", "name" } // 只加载需要的属性,提升性能
};

// 自动遍历所有分页结果
foreach (SearchResult result in searcher.FindAll())
{
    Console.WriteLine($"用户名: {result.Properties["name"][0]}, 账号: {result.Properties["samaccountname"][0]}");
}

3. 用ldapsearch工具(Linux/macOS环境)

通过指定分页参数启用分页查询:

ldapsearch -x -H ldap://yourdomain.com -b "dc=yourdomain,dc=com" -E pr=1000/noprompt "(objectClass=user)" samaccountname name

注意事项

  • 权限要求:执行查询的账号需要有AD用户数据的读取权限;
  • 性能优化:尽量只查询你需要的属性,避免用*获取所有属性,减少数据传输量;
  • 断点续传:如果查询中途中断,下次重启时可以通过保存的cookie继续,避免重复处理已获取的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:50