查询PrincipalSearcher以包含多个字符串

时间:2012-10-22 13:28:30

标签: c# usergroups principalcontext principalsearcher

我希望能够查询活动目录,列出包含以下用户或管理员等特定字词的所有群组,这是我到目前为止所拥有的

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
qbeGroup.DisplayName = "Administrators";
qbeGroup.DisplayName = "Users";
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
return srch.FindAll().Select(g => g.Name).ToArray();

此代码似乎甚至没有过滤掉不是管理员或用户的组名。但无论如何我无法弄清楚如何查询组名是否包含?而不是如果组名等于以及如何对多个字符串执行此操作。

我可以使用DirectoryEntry做同样的事情,所以我把它放在这里作为参考

var groups = new List<string>();
var path = string.Format("LDAP://CN=Users,DC=company,DC=com");
var computerEntry = new DirectoryEntry(path);

if (computerEntry != null)
   {
       using (computerEntry)
       {
            var userNames =
            from DirectoryEntry childEntry
            in computerEntry.Children
            where childEntry.SchemaClassName == "Group"
            select childEntry.Name;
            foreach (var name in userNames)
            {
                 if (name.Contains("Administrators") || name.Contains("Users"))
            {
             groups.Add(name);
       }
   }
}
}
return groups.ToArray();

1 个答案:

答案 0 :(得分:0)

我是通过使用foreach循环完成此操作但是下面的代码仍然没有回答我关于如何为Principalsearcher执行此操作的问题

var groups = new List<string>();
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
    foreach (var group in srch.FindAll())
    {
       if (group.Name.Contains("Administrators") || group.Name.Contains("Users"))
       {
             groups.Add(group.Name);
       }
    }
return groups.ToArray();