Найти размер группы в активном каталоге - PullRequest
0 голосов
/ 07 июня 2010

У меня есть следующий код. Я получаю запись каталога для пользователя (strpath). И тогда я получаю группы, в которых указан пользователь.

Как узнать количество пользователей в каждой группе?

DirectoryEntry myDE = new System.DirectoryServices.DirectoryEntry(strpath);
object obGroups = myDE.Invoke("Groups");
foreach (object ob in (IEnumerable)obGroups)
{
    DirectoryEntry obGpEntry = new DirectoryEntry(ob);
    GroupsListBox.Items.Add(obGpEntry.Name );
}

1 Ответ

1 голос
/ 07 июня 2010

Если вы используете .NET 3.5 (или можете обновиться до него), существует огромное расширенное пространство имен System.DirectoryServices.AccountManagement, которое значительно облегчает эти задачи по управлению пользователями, группами и их членством.

Ознакомьтесь со статьей MSDN Управление принципами безопасности каталогов в .NET Framework 3.5 для ознакомления с S.DS.AM.

Вы можете получить принципала пользователя следующим образом:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");

UserPrincipal user = UserPrincipal.FindByIdentity("some user name");

PrincipalSearchResult<Principal> userGroups = user.GetGroups();

foreach (Principal p in myGroups)
{
    GroupPrincipal gp = (p as GroupPrincipal);

    if (gp != null)
    {
        int memberCount = gp.Members.Count;
    }
}

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

...