如果一个OU包含3000个用户,如何使用DirectorySearcher从找到所有这些吗?如何使用、用户、OU、DirectorySearcher

2023-09-08 12:12:10 作者:正在缓冲99%

我用这个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 name User 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.

 
精彩推荐
图片推荐