DirectorySearcher vrací maximálně 1000 záznamů

MSDN dokumentace neobsahuje příliš mnoho informací k tomuto problému, naštěstí v diskustní skupině to již někdo řešil.

Objekt DirectorySearcher obsahuje dvě klíčové vlastnosti:

PageSize – defaultně nastaveno na 0 – bez stránkování, určuje počet záznamů v jednom interním requestu na server, o „stránkování“ se stará sám objekt vyhledávače.

SizeLimit – defaultně 1000, maximální počet vrácených záznamů

Při defaultním nastavení nikdy nevrátí více než 1000 záznamů, protože v tom případě vyhledávač nestránkuje. Pokud jste si mysleli, že stačí SizeLimit změnit na vyšší hodnotu, tak jste se spletli. Snad jediná možná cesta je změnit PageSize, aby došlo ke stránkování, ale zde je další vtip dokumentace, nikde nenajdete, ze PageSize musí být z intervalu 0-1000 a už vůbec to, že pokud nastavíte hodnotu 1000, opět nedojde ke stránkování a DS vrátí pouze 1000 záznamů – to považuji snad za bug… Správna cesta je nastavit PageSize na menší hodnotu, například 999, následně již obdržíte záznamy všechny…

Příklad načtení všech uživatelů z LDAPu:

DirectorySearcher mySearcher = new DirectorySearcher(rootEntry);

mySearcher.Filter = "(&(objectCategory=Person)(objectClass=User))";
mySearcher.PropertiesToLoad.Add("cn");
mySearcher.PropertiesToLoad.Add("objectClass");
mySearcher.PropertiesToLoad.Add("sAMAccountName");
mySearcher.PageSize = 999;

SearchResultCollection mySearcherSearchResult = mySearcher.FindAll();