I'm using PrincipalSearcher
and DirectorySearcher
to filter users and specify which properties to grab. On testing it on 2 different networks. One network has 8K+ records and the other has 135K+. On the 135K+ network, it fails to save the records to a database. So I want to do a test with a handful of records, but it doesn't fail on the couple hundred of records I've tried. So I tried increasing it to a thousand. But when I do that, it gives me everything instead of the thousand I requested.
Here's how I'm doing this:
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;
Notice the size limit here is 255. If I specify a value under 256, it will return the number of I records I specify. Quick example of it in action on the small network:
If I tell it to give me 255 records, it gives me 255 records. But if I tell it to give me 256 or higher, it wants to give me all of them.
Any ideas on what's going on here?
The problem was the
PageSize
property on theDirectorySearcher
object. It seems like the page size was limited when a non-default value was set to theSizeLimit
property. I set thePageSize
property to 4000 and any value I put in the SizeLimit pulled that exact number.