Obtendo a lista de usuários indiretamente membros de um grupo do AD por meio do LDAP

1

Estou tendo um problema com a pesquisa LDAP que deve especificar se um usuário é membro de um determinado grupo do AD ou não (recursivamente).

Basicamente, o que estou fazendo é emitir uma pesquisa LDAP com os seguintes parâmetros:

get-aduser -LDAPFilter "(memberof:1.2.840.113556.1.4.1941:={group LDAP path})" -SearchBase "{AD LDAP base}"

Isso produz o resultado esperado: em vez de obter todos os usuários que são direta ou indiretamente membros do grupo que estou procurando, recebo todos os membros diretos desse grupo, além de uma seleção aleatória de membros indiretos (membros de grupos que são membros do grupo pesquisado).

A lista que estou recebendo parece arbitrária: não consigo encontrar nenhuma diferença na associação ao grupo entre dois usuários que devem estar presentes no conjunto de resultados, mas um está lá e o outro não está.

(Eu preciso resolver esse problema com a pesquisa LDAP porque o resultado será usado em um aplicativo, não por meio do PowerShell. Mas usando o PowerShell dessa maneira, posso reproduzir o problema original da maneira descrita).

    
por Stephane 18.09.2014 / 11:44

2 respostas

1

Use Get-ADGroupMember com a opção -Recursive para obter uma listagem de todos os membros que não contêm objetos filho. Isso vai mergulhar em membros que têm objeto filho para obter seus membros.

Exemplo

$groupName = "Domain Admins"
$group = Get-ADGroup $groupName
$groupMembers = Get-ADGroupMember $group -Recursive

Você precisa consultar o grupo em vez dos usuários, pois o memberOf pode fornecer resultados inconsistentes, pois os usuários são membros de grupos aninhados / roles / etc.

    
por 18.09.2014 / 18:36
0

Você obtém o mesmo resultado com get-adobject (em vez de get-aduser)?
Ou tente usar o objeto .NET Directory Searcher

$rootDSE = [adsi]"LDAP://RootDSE"
$dnDomain = $rootDSE.defaultNamingContext
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.searchroot = [adsi]"LDAP://$dnDomain"
$search.Filter = "(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:={group LDAP path}))"
$search.findAll()
    
por 15.10.2014 / 15:49