仅在C#中的指定组中搜索Active Directory用户

时间:2013-02-07 22:55:27

标签: c# .net active-directory

我一直在努力寻找一种查询指定AD组成员的好方法。

我在寻找群组方面没有任何问题,甚至根据标准查询用户。

目前我有

 PrincipalContext context = new PrincipalContext(ContextType.Domain, _domain, ADServerUser, ADServerPassword);
 UserPrincipal userPrinciple = new UserPrincipal(context);
 userPrinciple.GivenName = "stringToSearchForFirstName";
 userPrinciple.Name = "stringToSearchForUserName";
 userPrinciple.Surname = "stringToSearchForLastName";
 PrincipalSearcher srch = new PrincipalSearcher(new UserPrincipal(context));                    
 srch.QueryFilter = userPrinciple;
 var result = srch.FindAll();

这给了我想要的所有用户,但它不会过滤掉组。

我可以使用GroupPrinciple对象和主搜索,但是我无法过滤掉用户。

我想要一种方法来同时应用UserPrincipal和GroupPrincipal来过滤BOTH Group和User参数返回的结果。

我已经使用linq where子句尝试进行匹配以查看用户是否在一个组中,但是当我让所有用户查询超时时。对所有人都有意义。

但是,如果我查询该组,我无法使用principalSearcher来应用查询。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, _domain);
// get the AD Group you are wanting to Query
GroupPrincipal group = GroupPrincipal.FindByIdentity("cn=YourGroupname");
foreach(Principal p in group.Members)
{
    //do what ever coding you need to do here            
}

答案 1 :(得分:1)

根据我的研究,我得出结论,使用Principal Objects能够过滤组和用户参数是不可能的。我们需要恢复使用查询字符串方法来解决问题。