Почему мой DirectorySearcher выдает исключение ArgumentOutOfRangeException, когда я пытаюсь получить свойство по имени?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой DirectorySearcher выдает исключение ArgumentOutOfRangeException, когда я пытаюсь получить свойство по имени?

Сообщение Anonymous »

У меня более 1500 пользователей в определенной группе AD, и когда я удаляю их, я ограничен в том, кого я получаю. Я видел эту статью в MSDN (http://msdn.microsoft.com/en-us/library ... 80%29.aspx), однако она выполняет FindOne(); при этом приложению требуется более 10 минут, чтобы отключить пользователей. С помощью SearchResultsCollection и .FindAll() я могу получить всех пользователей за 30 секунд.
Однако, когда дело доходит до обработки< /p>
string Last_Name = userResults.Properties["sn"][0].ToString();

он ​​возвращается с ошибкой:

Индекс вышел за пределы допустимого диапазона. Должно быть неотрицательным и меньше размера коллекции.
Имя параметра: index

Я решил, что проблема не найти однако результаты SearchResultsCollection содержат все 1000 записей.
Примечание: для этих пользователей фамилия не пуста, проблема в том, что resultCollection только возвращает 1 ресурс, и это путь к объявлению
DirectoryEntry dEntryhighlevel = new DirectoryEntry("LDAP://OU=Clients,OU=x,DC=h,DC=nt");

DirectorySearcher dSeacher = new DirectorySearcher(dEntryhighlevel);
dSeacher.Filter = "(&(objectClass=user)(memberof=CN=Users,,OU=Clients,OU=x,DC=h,DC=nt))";

uint rangeStep = 1000;
uint rangeLow = 1;
uint rangeHigh = rangeLow + (rangeStep -1);
bool lastQuery = false;
bool quitLoop = false;

do
{
string attributeWithRange;

if (!lastQuery)
{
attributeWithRange = String.Format("member;range={0}-{1}", rangeLow, rangeHigh);
}
else
{
attributeWithRange = String.Format("member;range={0}-*", rangeLow);
}

dSeacher.PropertiesToLoad.Clear();
dSeacher.PropertiesToLoad.Add(attributeWithRange);

SearchResultCollection resultCollection = dSeacher.FindAll();

foreach (SearchResult userResults in resultCollection)
{
string Last_Name = userResults.Properties["sn"][0].ToString();
string First_Name = userResults.Properties["givenname"][0].ToString();
string userName = userResults.Properties["samAccountName"][0].ToString();
string Email_Address = userResults.Properties["mail"][0].ToString();
OriginalList.Add(Last_Name + "|" + First_Name + "|" + userName + "|" + Email_Address);

if (userResults.Properties.Contains(attributeWithRange))
{
foreach (object obj in userResults.Properties[attributeWithRange])
{
Console.WriteLine(obj.GetType());

if (obj.GetType().Equals(typeof(System.String)))
{
}
else if (obj.GetType().Equals(typeof(System.Int32)))
{
}

Console.WriteLine(obj.ToString());
}

if (lastQuery)
{
quitLoop = true;
}
}
else
{
lastQuery = true;
}

if (!lastQuery)
{
rangeLow = rangeHigh + 1;
rangeHigh = rangeLow + (rangeStep - 1);
}
}
}
while (!quitLoop);


Подробнее здесь: https://stackoverflow.com/questions/122 ... n-i-try-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»