我创建了一个Active Directory域名“ADDOMAIN2”,其组名为“CommonUsers”,共有8个用户。但是当我在“CommonUsers”组中对用户进行目录搜索时,它返回零结果。她是我的代码
DirectorySearcher searcher = new DirectorySearcher();
DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}", "ADDOMAIN2"), "Administrator", "p@S$w0rd");
string dnPath = directoryEntry.Properties["distinguishedName"].Value.ToString();
// string path = string.Format("LDAP://{0}/{1}{2}", "ADDOMAIN2", "", dnPath);
string path = "LDAP://ADDOMAIN2/CN=CommonUsers,DC=ADDomain2,DC=ADDomain01,DC=WaveDomain";
directoryEntry.Path = path;
searcher.SearchRoot = directoryEntry;
searcher.Filter = "(&(objectCategory=person)(objectClass=user))";
SearchResultCollection rs = searcher.FindAll();
任何想法在这里有什么问题?
感谢名单
答案 0 :(得分:0)
尝试使用一些外部LDAP浏览器(如Softerra LDAP Browser的旧版和免费版2.6)来检查您的查询字符串是否真正指向正确的位置。
答案 1 :(得分:0)
DirectorySearcher不用于查找组内的用户。它用于在基本路径下查找对象。由于AD组对象下没有放置用户对象,因此无法找到任何内容。
在大多数情况下,您可以从其成员属性中找到AD组中的用户对象。请注意,AD组可以包含组或用户。所以,有些人可能会有团体。在某些情况下,member属性不包含AD组或AD用户,它包含Foreign Security Principal。如果您的用户来自另一个森林,则会发生这种情况主要群体的处理方式也不同。甚至“域用户”也是AD中大多数用户的主要组,其成员属性根本不包含任何内容。还有很多其他奇怪之处使枚举AD组对象变得非常困难。
幸运的是,在.NET 3.5中,Microsoft在框架中提供了一些有用的类来为您执行脏工作。查看System.DirectoryServices.AccountManagement
要获得一些快速示例,您可以查看此代码项目article
您的代码应该是这样的。
PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com");
GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Users");
foreach (Principal principal in groupPrincipal.GetMembers(false))
{
Console.Out.WriteLine(principal.DistinguishedName);
}
Console.In.ReadLine();