Назад | Перейти на главную страницу

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

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

group
   subgroup1
      subsubgroup1a
      subsubgroup2b
   subgroup2
      subsubgroup2a
         userXY
      subsubgroup2b

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

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

$Filter = "Name -eq TestUser"
$User = Get-ADUser -filter $Filter -Properties memberof | select memberof

Обновить: Технически, если вы не против создания громоздкой функции,

    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/

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

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