如果一个OU包含3000个用户,如何使用DirectorySearcher从找到所有这些吗? [英] If an OU contains 3000 users, how to use DirectorySearcher to find all of them?
问题描述
我用这个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();
每个时间,它只能返回1000的用户,但也有3000个用户在该OU
Each time, it only return 1000 users, but there are 3000 users in that OU.
我怎么能找到所有这些吗?
How can i find all of them ?
推荐答案
如果您使用的是.NET 3.5或更新版本,你应该看看 PrincipalSearcher
和查询通过例如主要做你的搜索:
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.....
}
如果您还没有 - 绝对阅读MSDN文章管理目录安全主体在.NET Framework 3.5 这表明很好如何使新功能的最佳使用 System.DirectoryServices.AccountManagement
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
更新:
当然,这取决于你的需要,你可能想在你创建的查询通过例如用户主体指定其他属性:
Of course, depending on your need, you might want to specify other properties on that "query-by-example" user principal you create:
-
姓
(或姓名) -
显示名称
(通常是:第一个名称+空格+姓) -
SAM帐户名
- 您的Windows / AD帐户名 -
用户主要名称
- 你的username@yourcompany.com样式名
Surname
(or last name)DisplayName
(typically: first name + space + last name)SAM Account Name
- your Windows/AD account nameUser Principal Name
- your "username@yourcompany.com" style name
您可以指定任何关于 UserPrincipal
属性,并使用这些作为查询通过例如为您 PrincipalSearcher
。
You can specify any of the properties on the UserPrincipal
and use those as "query-by-example" for your PrincipalSearcher
.
更新#2:如果您要搜索只是里面一个给定的OU,您可以定义该OU中的 PrincipalContext
的构造。
Update #2: If you want to search just inside a given OU, you can define that OU in the constructor of the PrincipalContext
.
这篇关于如果一个OU包含3000个用户,如何使用DirectorySearcher从找到所有这些吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!