我一直在努力寻找一种查询指定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来应用查询。
关于如何做到这一点的任何想法?
答案 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能够过滤组和用户参数是不可能的。我们需要恢复使用查询字符串方法来解决问题。