1

次のコードを使用して、ActiveDirectoryからユーザーの詳細を取得しています

DirectoryEntry Entry = new DirectoryEntry("LDAP://dc=" + Domainname + ",dc=directoryname,dc=com", username, password, AuthenticationTypes.Secure);

DirectorySearcher DS = new DirectorySearcher(Entry);
List<string> lstPath = new List<string>();
DS.Filter = "(sAMAccountName=*)";
//DS.Filter = "(sAMAccountName=umbarglp)";
//DS.Filter = "(sAMAccountName=Adminumbarglp)";

SearchResultCollection ResultsCollection = DS.FindAll();

このコードでは、それ以下の20000レコードしか取得していません。私が使用する必要があるものは、ADのすべてのエントリを取得します。

前もって感謝します。エシュワー

4

1 に答える 1

1

問題は、返されるレコードの最大数が、サーバーで構成された最大数を超えることはないということです ( SizeLimitのドキュメントを参照してください)。その量をさらに増やすことが可能であれば、それが最も迅速な解決策になります (ただし、他のプログラムもより多くのレコードを取得でき、オーバーロードを引き起こす場合には、おそらくお勧めできません)。

編集 好奇心から、チャンクで読み取ることでこれがどのように行われるかをテストしたかったのですが、これはうまくいくようです:

        DS.SizeLimit = 10; //set small for testing, change before production ;)            
        DS.Filter = "(sAMAccountName=*)";            
        var list = new List<SearchResult>();

        SearchResultCollection res;
        while ((res = DS.FindAll()).Count > 0)
        {
            list.AddRange(res.Cast<SearchResult>());       
            var last = list[list.Count - 1].GetDirectoryEntry().InvokeGet("sAMAccountName").ToString()
                + "0"; // <- small cheat to prevent doubles because the search does not support > , but does support >=
            DS.Filter = "(sAMAccountName>=" + last + ")";
        }
于 2012-06-21T15:49:07.203 に答える