Como posso saber de quais grupos do AD aninhados um usuário é membro?

2

Eu tenho um conjunto de grupos AD aninhados:

group
   subgroup1
      subsubgroup1a
      subsubgroup2b
   subgroup2
      subsubgroup2a
         userXY
      subsubgroup2b

Estou usando "grupo" para conceder acesso a um servidor. Agora quero saber porque meu "userXY" tem acesso ao servidor. Como posso usar o powershell para descobrir que o usuário é membro de "subgrupo2a"?

    
por jlai79 20.10.2015 / 18:06

3 respostas

1

Atualização: Tecnicamente, se você não se importar em criar uma função volumosa,

    function GetGroups ($object)
{
    Get-ADPrincipalGroupMembership $object | ForEach '
    {
        $_
        Get-ADPrincipalGroupMembership $_
    }
}

Então você pode executar:

GetGroups username | select name -Unique

Eu usei esse no passado. Leva um tempo também. Ou

Veja um script pré-criado para encontrar os dados do grupo aninhado: link

Atualização 2: O amigo do administrador usa esse script. Ele lista todos os grupos de seg, mas ainda funciona e você pode fazer o dump para CSV para navegação fácil:

    
por 20.10.2015 / 18:29
1

Se o seu DC Publishing ADWS for 2012 ou posterior, você tem o RSAT mais recente e, pelo menos, o Powershell v4, você pode fazer isso:

$Filter = "Name -eq TestUser"
$User = Get-ADUser -filter $Filter -Properties memberof | select memberof
    
por 20.10.2015 / 21:58
1

Usamos a seguinte função para recuperar as associações recursivas do grupo AD:

Function Get-GroupMembershipRecurse {
[CmdletBinding()]
Param(
    [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
    [string]$DistinguishedName
)

$memberships = @()
try{
    $obj = Get-ADObject -Identity $DistinguishedName -Properties SamAccountName,MemberOf
} catch {
    Write-Warning "Error while retrieving object details for $DistinguishedName"
    return [string[]]$memberships
}
if ($obj.ObjectClass -eq "group") {
    Write-Verbose "$($obj.name) is of ObjectClass Group. Adding to list of memberships."
    $memberships += $obj
}

$obj.MemberOf | Sort-Object | %{
    # prevent a loop if the group is a member of itself
    if ( $_ -ne $obj.DistinguishedName ) {
        $recursiveMembers = Get-GroupMembershipRecurse $_

        # Add all retrieved memberOf entries to the membership list
        $recursiveMembers | %{
            $memberships += $_
        }
    }
}

return [string[]]$memberships
}

A função acima retornará todos os grupos dos quais um objeto (no seu caso, uma conta de usuário) é membro, direta ou indireta.

    
por 21.10.2015 / 12:40