Получите список членов группы WinNT

Существует несколько вопросов, подобных этому на переполнении стека, но не совсем том же.

Я хочу открыть, или создать, локальная группа на победе xp компьютер и добавить участников к нему, домен, локальные и известные учетные записи. Я также хочу проверить, является ли пользователь уже участником так, чтобы я не добавил ту же учетную запись дважды и по-видимому получил исключение.

До сих пор я начал использовать объект DirectoryEntry с WinNT:// поставщик. Это идет хорошо, но я застреваю о том, как получить список членов группы?

Кто-либо знает, как сделать это? Или предоставьте лучшее решение, чем использование DirectoryEntry?

19
задан ekad 28 November 2017 в 07:32
поделиться

3 ответа

Хорошо, это требовало времени, бездельничая с различными решениями, но тот, который подходит лучше всего с моим исходным вопросом, дан ниже. Я не могу получить объект DirectoryEntry получить доступ к членам локальной группы, использующей 'стандартные' методы, единственный способ, которым я мог добраться, это для перечисления участников было при помощи Вызвать метода для вызова, собственный компонент возражает членскому методу.

using(DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group"))
{
    foreach(object member in (IEnumerable) groupEntry.Invoke("Members"))
    {
        using(DirectoryEntry memberEntry = new DirectoryEntry(member))
        {
            Console.WriteLine(memberEntry.Path);
        }
    }
}

я также использовал подобную технику, чтобы добавить и удалить участников из локальной группы.

, Надо надеяться, это помогает кому-то еще также. Keith.

РЕДАКТИРОВАНИЕ Tim: добавленная версия

Public Function MembersOfGroup(ByVal GroupName As String) As List(Of DirectoryEntry)
    Dim members As New List(Of DirectoryEntry)
    Try
        Using search As New DirectoryEntry("WinNT://./" & GroupName & ",group")
            For Each member As Object In DirectCast(search.Invoke("Members"), IEnumerable)
                Dim memberEntry As New DirectoryEntry(member)
                members.Add(memberEntry)
            Next
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try
    Return members
End Function
VB.Net
30
ответ дан 30 November 2019 в 03:29
поделиться

Microsoft.NET Framework обеспечивает стандартную библиотеку для работы с Active Directory: Система. Пространство имен DirectoryServices в System.DirectoryServices.dll.

Microsoft рекомендует использовать два основных класса от Системы. Пространство имен DirectoryServices: DirectoryEntry и DirectorySearcher. В большинстве случаев достаточно использовать класс DirectorySearcher только.

ОБНОВЛЕНИЕ: Я протестировал его на своей машине - это работает. Но возможно я неправильно понял Ваш вопрос.

Вот пример от превосходного статья CodeProject:

Получают список пользователей, принадлежащих конкретной AD группе

using System.DirectoryServices;

ArrayList GetADGroupUsers(string groupName)
{    
   SearchResult result;
   DirectorySearcher search = new DirectorySearcher();
   search.Filter = String.Format("(cn={0})", groupName);
   search.PropertiesToLoad.Add("member");
   result = search.FindOne();

   ArrayList userNames = new ArrayList();
   if (result != null)
   {
       for (int counter = 0; counter < 
          result.Properties["member"].Count; counter++)
       {
           string user = (string)result.Properties["member"][counter];
               userNames.Add(user);
       }
   }
   return userNames;
}
7
ответ дан 30 November 2019 в 03:29
поделиться

Необходимо смочь найти эту информацию в "member" атрибут на DirectoryEntry, который представляет группу.

1
ответ дан 30 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: