从Active Directory组获取用户

时间:2010-12-31 09:12:41

标签: active-directory

我创建了一个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();

任何想法在这里有什么问题?

感谢名单

2 个答案:

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