Как я могу сказать, кого из моих вложенных AD групп пользователь является членом?

У меня есть ряд вложенных AD групп:

group
   subgroup1
      subsubgroup1a
      subsubgroup2b
   subgroup2
      subsubgroup2a
         userXY
      subsubgroup2b

Я использую "группу" для предоставления доступа к серверу. Теперь я хочу знать, почему мой "userXY" имеет доступ к серверу. Как я могу использовать powershell, чтобы узнать, что пользователь является членом "subsubgroup2a"?

2
задан 20 October 2015 в 19:06
3 ответа

Обновление: Технически, если вы не возражаете создать громоздкий function,

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

Затем вы можете запустить:

GetGroups username | select name -Unique

Я использовал это раньше. Это тоже требует времени. Или

Вот готовый сценарий для поиска данных вложенной группы: https://gallery.technet.microsoft.com/scriptcenter/Get-nested-group-15f725f2

Обновление 2: Друг администратора использует этот сценарий. В нем перечислены все группы sec, но они все еще работают, и вы можете выполнить дамп в CSV для упрощения навигации: http://practical-admin.com/blog/powershell-recursively-show-user-membership-in-an-active -directory-group /

1
ответ дан 3 December 2019 в 10:41

Мы используем следующую функцию для получения рекурсивного членства в группах 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
}

Вышеупомянутая функция вернет все группы, в которых объект (в вашем случае - учетная запись пользователя) является прямым или косвенным членом.

1
ответ дан 3 December 2019 в 10:41

Если ADWS публикации DC 2012 или новее, у вас есть последняя версия RSAT и, по крайней мере, Powershell v4, вы можете сделать это:

$Filter = "Name -eq TestUser"
$User = Get-ADUser -filter $Filter -Properties memberof | select memberof
1
ответ дан 3 December 2019 в 10:41

Теги

Похожие вопросы