Если вы используете .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;
}
}
Таким образом, вы можете перечислить все группы, которые есть у данного пользователя, и, перечислив эти группы, вы можете узнать, сколько членов (пользователей и других групп) имеет каждая группа.