如果 SizeLimit 为 256 或以上,DirectorySearcher 不遵守 SizeLimit 属性

DirectorySearcher doesn't respect the SizeLimit property if the SizeLimit is 256 or over

我正在使用 PrincipalSearcherDirectorySearcher 来过滤用户并指定要获取的属性。在 2 个不同的网络上测试它。一个网络有 8K+ 记录,另一个网络有 135K+。在 135K+ 网络上,无法将记录保存到数据库中。所以我想用几条记录做一个测试,但在我试过的几百条记录上它并没有失败。所以我试着把它增加到一千。但是当我这样做时,它给了我一切,而不是我要求的一千。

我是这样操作的:

using (PrincipalSearcher searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
    DirectorySearcher directorySearcher = searcher.GetUnderlyingSearcher() as DirectorySearcher;
    directorySearcher.Filter = "(&(objectSid=*)(sn=*)(givenName=*)(objectGuid=*))";
    directorySearcher.PropertiesToLoad.Add("ObjectGUID");
    directorySearcher.PropertiesToLoad.Add("objectSid");
    directorySearcher.PropertiesToLoad.Add("GivenName");
    directorySearcher.PropertiesToLoad.Add("sn");
    directorySearcher.PropertiesToLoad.Add("mail");
    directorySearcher.PropertiesToLoad.Add("telephoneNumber");
    directorySearcher.PropertiesToLoad.Add("sAMAccountName");
    directorySearcher.PropertiesToLoad.Add("distinguishedName");
    directorySearcher.PropertiesToLoad.Add("title");
    directorySearcher.PropertiesToLoad.Add("department");
    directorySearcher.PropertiesToLoad.Add("company");
    directorySearcher.PropertiesToLoad.Add("manager");
    directorySearcher.PropertiesToLoad.Add("PhysicalDeliveryOfficeName");
    directorySearcher.PropertiesToLoad.Add("countryCode");
    directorySearcher.SizeLimit = 255;

注意这里的大小限制是 255。如果我指定一个小于 256 的值,它将 return 我指定的记录数。它在小型网络上的快速示例:

如果我告诉它给我 255 条记录,它就会给我 255 条记录。但是如果我告诉它给我 256 或更高,它想要给我所有这些。

对这里发生的事情有什么想法吗?

问题是 DirectorySearcher 对象上的 PageSize 属性。当非默认值设置为 SizeLimit 属性 时,页面大小似乎受到限制。我将 PageSize 属性 设置为 4000,我在 SizeLimit 中输入的任何值都提取了那个确切的数字。