如果SizeLimit为256或更高,DirectorySearcher不会尊重SizeLimit属性

时间:2017-07-26 16:19:15

标签: c# active-directory directorysearcher principalsearcher

我使用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,它将返回我指定的I记录数。它在小型网络上的快速示例:

enter image description here

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

enter image description here

关于这里发生了什么的任何想法?

1 个答案:

答案 0 :(得分:1)

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