获取Active Directory组中的所有用户

时间:2011-08-31 05:35:41

标签: c# .net asp.net-mvc-3 c#-4.0 .net-4.0

我正在尝试让所有属于Active Directory中的组的用户。我希望将结果显示为网站用户选择的下拉列表。这就是我到目前为止所做的:

public IEnumerable<KeyValuePair<string, string>> GetAllMembers(string group)
{
    var domainContext = new PrincipalContext(ContextType.Domain);
    var group = GroupPrincipal.FindByIdentity(domainContext, group);

    return from principal in @group.Members select new KeyValuePair<string, string>(/* need to fill in key and value */);
}

我遇到的问题是我在一个活动目录之外开发它,所以还不能真正测试它(长篇故事不要问)。在将其部署到测试环境中时,我希望最大限度地提高成功率。

我的问题是:如果我希望键值对包含登录用户名(密钥,例如:"DOMAIN\darkoz")和用户真实姓名(值,例如:"Darko Z"),我该如何获得那些? Principal对象至少有5个属性,其中包含单词Name,所以我不确定哪个是哪个。

奖金问题:这是实现目标的普遍接受的方式吗?我意识到这是一个非常简单的问题,但由于我对Active Directory缺乏了解,如果有更好的方法,我不会感到惊讶。这项工作是否会在非管理员帐户上运行?

2 个答案:

答案 0 :(得分:3)

解决方案就像我怀疑的那样:

public IEnumerable<KeyValuePair<string, string>> GetAllMembers(string group)
{
    var domainContext = new PrincipalContext(ContextType.Domain);
    var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, group);

    return from m
           in groupPrincipal.Members 
           select new KeyValuePair<string, string>(m.SamAccountName, m.Name);
}

SamAccountName为用户提供登录名,Name为实际名称

答案 1 :(得分:0)

我会阅读以前的类似问题来回答您的问题,最佳做法以及如何阅读帐号名称和全名:Get all users from AD domain

无论如何,来自MS论坛:

static void Main(string[] args)
{
    string groupName = "Domain Users";
    string domainName = "";

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName);
    GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, groupName);

    if (grp != null)
    {
         foreach (Principal p in grp.GetMembers(false))
            {
                Console.WriteLine(p.SamAccountName + " - " + p.DisplayName);
            }


        grp.Dispose();
        ctx.Dispose();
        Console.ReadLine();
    }
    else
    {
        Console.WriteLine("\nWe did not find that group in that domain, perhaps the group resides in a different domain?");
        Console.ReadLine();
    }
}

来源:Get list of Active Directory users in C#