我怎么知道我的哪个嵌套的AD组是用户的成员?

我有一组嵌套的AD组:

group subgroup1 subsubgroup1a subsubgroup2b subgroup2 subsubgroup2a userXY subsubgroup2b 

我正在使用“组”来授予对服务器的访问权限。 现在我想知道为什么我的“userXY”有权访问服务器。 如何使用PowerShell来发现用户是“subsubgroup2a”的成员?

更新:从技术上讲,如果你不介意构build一个庞大的函数,

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

然后你可以运行:

 GetGroups username | select name -Unique 

我以前用过那个 需要一段时间。 要么

这是预build的脚本来查找嵌套的组数据: https : //gallery.technet.microsoft.com/scriptcenter/Get-nested-group-15f725f2

更新2:pipe理员朋友使用此脚本。 它列出所有秒组,但仍然工作,你可以转储到CSV轻松导航: http : //practical-admin.com/blog/powershell-recursively-show-user-membership-in-an-active-directory-组/

如果您的DC发布ADWS是2012或更高版本,则您拥有最新的RSAT,至lessPowershell v4可以执行此操作:

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

这里有很多在线的脚本。 如果您有多个域或外部信任,请确保它包含跨域成员资格scheme。 – 很less有脚本考虑到这一点

我们使用下面的函数来检索recursion的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 } 

上面的函数将返回所有组的对象(在你的情况下,一个用户帐户)是直接或间接的成员。