2012-10-22 106 views
2

我希望能够查询活动目录,得到含像用户或管理员低于某些词的所有组的列表是我到目前为止已经查询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(); 

回答

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();