Obter membros de um grupo do Active Directory recursivamente, ou seja, incluindo subgrupos
Dado um grupo como este no Active Directory:
MainGroup
GroupA
User1
User2
GroupB
User3
User4
Posso determinar facilmente se o Usuário3 é membro do MainGroup ou de qualquer um de seus subgrupos com código como este:
using System;
using System.DirectoryServices;
static class Program {
static void Main() {
DirectoryEntry user = new DirectoryEntry("LDAP://CN=User3,DC=X,DC=y");
string filter = "(memberOf:1.2.840.113556.1.4.1941:=CN=MainGroup,DC=X,DC=y");
DirectorySearcher searcher = new DirectorySearcher(user, filter);
searcher.SearchScope = SearchScope.Subtree;
var r = searcher.FindOne();
bool isMember = (r != null);
}
}
Gostaria de saber se existe uma maneira semelhante de obter todos os usuários que são membros de um grupo ou qualquer um de seus subgrupos, ou seja, no exemplo do MainGroup, obter Usuário1, Usuário2, Usuário3 e Usuário4.
A maneira óbvia de conseguir todos os usuários é consultar recursivamente cada subgrupo, mas eu queria saber se existe uma maneira mais fácil.
Usando a mesma abordagem com omemberOf:1.2.840.113556.1.4.1941:
filtro, mas não é possível usar a raiz do domínio em vez do usuário como base de pesquisa, pois a consulta leva muito tempo (provavelmente calcula todas as associações do grupo recursivamente para todos os usuários no domínio e verifica se eles são membros do grupo especificado )
Qual é a melhor maneira de obter todos os membros de um grupo, incluindo seus subgrupos?