c # Служба каталогов Active Directory findAll () возвращает только 1000 записей

Возможный дубликат:
Могу ли я получить более 1000 записей от DirectorySearcher в Asp.Net?

Я ищу существующие логины с помощью метода findAll () поискового поисковика ADS (как в следующем коде). Кажется, метод findall возвращает только 1000 записей, хотя есть больше записей, чем это. Как мне найти All () каждого входа?

IList adslist = new List(); using (DirectoryEntry de = new DirectoryEntry("LDAP://armlink.com", null, null, AuthenticationTypes.Secure)) using (DirectorySearcher ds = new DirectorySearcher(de, "(objectclass=user)", new string[] { "samaccountname" })) foreach (SearchResult sr in ds.FindAll()) { string[] e = sr.Path.Split(new string[] { "LDAP://", "OU=", ",", "DC=", ".com", "/CN=" }, StringSplitOptions.RemoveEmptyEntries); ResultPropertyCollection pc = sr.Properties; adslist.Add(e[0] + "/" + pc["samaccountname"][0].ToString()); // Debug.WriteLine(adslist.Last()); } 

Это связано с лимитом на стороне сервера. В документации DirectorySearcher.SizeLimit :

Максимальное количество объектов, возвращаемых сервером при поиске. Значение по умолчанию равно нулю, что означает использование установленного сервером размера по умолчанию для 1000 записей.

А также:

Если для параметра SizeLimit установлено значение, превышающее установленное сервером значение по умолчанию в 1000 записей, используется заданное по умолчанию значение по умолчанию.

В основном из этого, похоже, что если есть способ изменить значение по умолчанию на стороне сервера, вы будете ограничены до 1000 записей. Возможно, что указание PageSize позволит вам получить определенное число за раз, с общим количеством больше 1000 … не уверен.

Кстати, похоже, что у вас также должна быть директива using вокруг SearchResultCollection :

 using (SearchResultCollection results = ds.FindAll()) { foreach (SearchResult sr in results) { ... } } 

Существует два способа обойти это ограничение – подробнее см. В документах MSDN в DirectorySearcher :

  • установите для свойства DirectorySearcher.SizeLimit значение, которое вам нужно – это вернет указанное количество записей в одном поиске; однако вы не можете получить больше, чем ограничение сервера (по умолчанию: 1 000 записей) за одну операцию – однако это ограничение сервера является настраиваемой опцией – вы можете установить его выше, а затем установить лимит размера искателя вашего каталога выше – но чем больше записей вы хотите вернуть сразу, тем длиннее ваш звонок будет!

  • установите для параметра DirectorySearcher.PageSize какое-то значение, например 250 или около того, чтобы выполнить «поисковые запросы», например, вы возвращаете 250 записей за одну операцию, и если вы перебираете 251-ю запись, искатель каталога возвращается (в секунду , третий, четвертый вызов), чтобы получить еще 250 записей. Это, как правило, лучший вариант, поскольку вы быстро возвращаете это количество записей, но вы можете продолжать поиск дополнительных записей по мере необходимости

Предпочтительный способ обработки ситуаций, когда вам нужно больше, чем 1000 записей, – это, безусловно, поисковые запросы – см. Документы MSDN:

После того, как сервер найдет количество объектов, заданных свойством PageSize, оно прекратит поиск и возвращает результаты клиенту. Когда клиент запрашивает больше данных, сервер перезапустит поиск, где он остановился.

  • Рекомендации по parsingу файлов .eml в C #
  • Как определить программным способом, является ли конкретный процесс 32-разрядным или 64-разрядным
  • Получить текущую System.Web.UI.Page из HttpContext?
  • Равновесие и допуски с плавающей точкой
  • C: Несколько scanf, когда я вводим значение для одного scanf, он пропускает второй scanf
  • C # regex для получения идентификатора видео с youtube и vimeo по URL-адресу
  • Почему printf округляет числа с плавающей запятой?
  • Объединение переменных имен в C?
  • Реализация операторов сравнения через «tuple» и «tie» - хорошая идея?
  • Можете ли вы удалить элементы из std :: list во время итерации через него?
  • Сравните std :: wstring и std :: string
  • Давайте будем гением компьютера.