问题描述
I use this code:
DirectoryEntry objEntry; DirectorySearcher objSearchEntry; SearchResultCollection objSearchResult; string strFilter = "(&(objectCategory=User))"; objEntry = new DirectoryEntry(conOUPath, conUser, conPwd, AuthenticationTypes.Secure); objEntry.RefreshCache(); objSearchEntry = new DirectorySearcher(objEntry); objSearchEntry.Filter=strFilter; objSearchEntry.SearchScope=SearchScope.Subtree; objSearchEntry.CacheResults=false; objSearchResult=objSearchEntry.FindAll();
Each time, it only return 1000 users, but there are 3000 users in that OU.
How can i find all of them ?
If you're on .NET 3.5 or newer, you should check out the PrincipalSearcher and a "query-by-example" principal to do your searching:
// create your domain context PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "OU=SomeOU,DC=YourCompany,DC=com"); // define a "query-by-example" principal - here, we search for a UserPrincipal // and with the first name (GivenName) of "Bruce" UserPrincipal qbeUser = new UserPrincipal(ctx); qbeUser.GivenName = "Bruce"; // create your principal searcher passing in the QBE principal PrincipalSearcher srch = new PrincipalSearcher(qbeUser); // set the PageSize on the underlying DirectorySearcher to get all 3000 entries ((DirectorySearcher)srch.GetUnderlyingSearcher()).PageSize = 500; // find all matches foreach(var found in srch.FindAll()) { // do whatever here - "found" is of type "Principal" - it could be user, group, computer..... }
If you haven't already - absolutely read the MSDN article Managing Directory Security Principals in the .NET Framework 3.5 which shows nicely how to make the best use of the new features in System.DirectoryServices.AccountManagement
Update:
Of course, depending on your need, you might want to specify other properties on that "query-by-example" user principal you create:
- Surname (or last name)
- DisplayName (typically: first name + space + last name)
- SAM Account Name - your Windows/AD account name
- User Principal Name - your "username@yourcompany.com" style name
You can specify any of the properties on the UserPrincipal and use those as "query-by-example" for your PrincipalSearcher.
Update #2: If you want to search just inside a given OU, you can define that OU in the constructor of the PrincipalContext.