Получить всех пользователей в группе Active Directory - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь получить всех пользователей, принадлежащих к группе в 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 ]

3 голосов
/ 06 сентября 2011

Решение было, как я и подозревал:

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 - фактическое имя

0 голосов
/ 31 августа 2011

Я бы прочитал предыдущие подобные вопросы, чтобы ответить на оба ваших вопроса, о передовых практиках и о том, как прочитать имя учетной записи и полное имя: Получить всех пользователей из домена AD

в любом случае, изФорум 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();
    }
}

источник: Получить список пользователей Active Directory в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...