通过.net获取Active Directory组中的用户名

时间:2011-02-04 18:44:59

标签: c# .net visual-studio-2010 active-directory

下面的代码会告诉我组中的用户但是会返回 "CN=johnson\,Tom,OU=Users,OU=Main,DC=company,DC=com"

我想返回名字和姓氏。我怎么能做到这一点?

DirectoryEntry ou = new DirectoryEntry();
DirectorySearcher src = new DirectorySearcher();

src.Filter = ("(&(objectClass=group)(CN=Gname))");
SearchResult res = src.FindOne();
if (res != null)
{
    DirectoryEntry deGroup = new DirectoryEntry(res.Path);
    PropertyCollection pcoll = deGroup.Properties;

    foreach (object obj in deGroup.Properties["member"])
    {
            ListBox1.Items.Add(obj.ToString());
    }
}

3 个答案:

答案 0 :(得分:28)

我更喜欢使用System.DirectoryServices.AccountManagement中的类:

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "GName");

搜索group.Members属性,直到您拥有所需的 Principal 。然后像这样提取名称:

foreach (Principal principal in group.Members)
{
   string name = principal.Name;
}

答案 1 :(得分:2)

使用您的代码, givenName 名字)和 sn 姓氏)属性应该有效

如果您使用System.DIrectoryServices.AccountManagement命名空间UserPrincipal(如@ russell-mcclure建议的那样),您还会找到 GivenName Surname 属性。

除非您必须遍历受信任的林并需要全局编录才能找到该用户,否则帐户管理非常方便。

答案 2 :(得分:0)

这是我在不使用AccountManagement类的情况下执行的PowerShell脚本。将它转换为C#:

应该很容易
{{1}}