У меня есть ряд вложенных AD групп:
group
subgroup1
subsubgroup1a
subsubgroup2b
subgroup2
subsubgroup2a
userXY
subsubgroup2b
Я использую "группу" для предоставления доступа к серверу. Теперь я хочу знать, почему мой "userXY" имеет доступ к серверу. Как я могу использовать powershell, чтобы узнать, что пользователь является членом "subsubgroup2a"?
Обновление: Технически, если вы не возражаете создать громоздкий 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 /
Мы используем следующую функцию для получения рекурсивного членства в группах 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
}
Вышеупомянутая функция вернет все группы, в которых объект (в вашем случае - учетная запись пользователя) является прямым или косвенным членом.
Если ADWS публикации DC 2012 или новее, у вас есть последняя версия RSAT и, по крайней мере, Powershell v4, вы можете сделать это:
$Filter = "Name -eq TestUser"
$User = Get-ADUser -filter $Filter -Properties memberof | select memberof