1

我正在使用以下代码从活动目录中获取用户详细信息

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 回答