У меня более 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
Почему мой DirectorySearcher выдает исключение ArgumentOutOfRangeException, когда я пытаюсь получить свойство по имени? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ml.net LoadFromEnumerable всегда выдает System.ArgumentOutOfRangeException
Anonymous » » в форуме C# - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Что такое исключение IndexOutOfRangeException/ArgumentOutOfRangeException и как его исправить?
Anonymous » » в форуме C# - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-