私が行っていることは、特定の AD グループに 1500 人を超えるユーザーがいて、それらをプルダウンすると、取得するユーザーが制限されます。MSDN (http://msdn.microsoft.com/en-us/library/ms180907%28v=vs.80%29.aspx) でこの記事を見ましたが、これを実行するFindOne()
と、アプリをプルするのに 10 分以上かかります。ユーザーをダウンさせます。ResultsCollection
30 秒でアプリを開くことができます 。
処理に入る時
string Last_Name = userResults.Properties["sn"][0].ToString();
エラーが返されます:
インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。\r\nパラメータ名: index"}
これには結果が見つからないという問題があると考えましたが、ResultsCollection
1000 エントリすべてが含まれています。どんな助けでも大歓迎です。ありがとう!
注: これらのユーザーの姓は空ではありません。問題はresultCollection
1 つのプロパティのみを返すことです。adpath
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);