使用自定义属性查询所有用户的Active Directory

时间:2013-09-25 18:42:52

标签: c# active-directory

我正在使用自定义UserPrincipalEx-class,因为我想在Active Directory中查询自定义属性“costCenter”。因此,自定义UserPrincipalEx-Class添加了DirectoryProperty(“costCenter”)。基本和长期运行(3分钟)版本如下所示:

// create domain context
PrincipalContext context = new PrincipalContext(ContextType.Domain, "myDomainController");

// define the query-by-example principal
UserPrincipal qbeUser = new UserPrincipal(context);

// create the principal searcher    
PrincipalSearcher searcher = new PrincipalSearcher(qbeUser);

// find all matches
foreach (var hit in searcher.FindAll())
{
    //do incredible stuff here
}

现在,使用为自定义属性“costCenter”扩展的自定义类“UserPrincipalEx”:

UserPrincipalEx qbeUser = new UserPrincipalEx(context);
qbeUser.costCenter = "123";

使查询执行几乎与光一样快。但我真正需要的是查询拥有 costCenter的所有用户(并非所有用户都这样做)。

所以我的问题是:如何使用扩展的“按示例查询”主体来搜索拥有自定义属性的主体?

1 个答案:

答案 0 :(得分:0)

我恢复使用

Parallel.ForEach 

为了加快整个过程。 ForEach-Loop使用我感兴趣的自定义属性的所有值在IEnumerable上运行,使用其中一个值整理UserPrincipalEx属性并将结果添加到列表中。

不是我想要的,但有效:从3分钟到15秒。