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

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

我有一组嵌套的 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
}

上述函数将返回对象(在您的情况下为用户帐户)所属的所有组,直接或间接。

相关内容