我有一组嵌套的 AD 组:
group
subgroup1
subsubgroup1a
subsubgroup2b
subgroup2
subsubgroup2a
userXY
subsubgroup2b
我正在使用“组”授予对服务器的访问权限。现在我想知道为什么我的“userXY”有权访问该服务器。如何使用 powershell 找出该用户是“subsubgroup2a”的成员?
答案1
更新: 从技术上讲,如果你不介意构建一个庞大的函数,
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: 管理员朋友使用此脚本。它确实列出了所有安全组,但仍然有效,您可以将其转储到 CSV 以方便导航: http://practical-admin.com/blog/powershell-recursively-show-user-membership-in-an-active-directory-group/
答案2
如果您的 DC 发布 ADWS 是 2012 或更高版本,并且您拥有最新的 RSAT,并且至少拥有 Powershell v4,则可以执行以下操作:
$Filter = "Name -eq TestUser"
$User = Get-ADUser -filter $Filter -Properties memberof | select memberof
答案3
我们使用以下函数来检索递归 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
}
上述函数将返回对象(在您的情况下为用户帐户)所属的所有组,直接或间接。