如何使用Powershell或其他工具获取所有AD用户组(递归)?

时间:2014-05-08 20:41:18

标签: powershell active-directory active-directory-group

我正在尝试让所有用户都是成员的组,甚至是嵌套的(重复),在我正在使用的Powershell中:

(Get-ADUser <username> -Properties MemberOf | Select-Object MemberOf).MemberOf

但它只返回用户是“直接”成员的组,就像使用AD用户控制台时所获得的那样。我所有组的单个列表非常有用,例如“gpresult -r”的输出,其中显示用户所属的所有组。

有没有办法从任何AD用户那里获取它? (不需要专门用于Powershell,也许是我还不知道的另一种工具)

2 个答案:

答案 0 :(得分:21)

您可以使用LDAP_MATCHING_RULE_IN_CHAIN

Get-ADGroup -LDAPFilter "(member:1.2.840.113556.1.4.1941:=CN=User,CN=USers,DC=x)"

您可以在任何可以使用LDAP过滤器的地方使用它。

示例:

$username = 'myUsername'
$dn = (Get-ADUser $username).DistinguishedName
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) | select -expand Name | sort Name

答案 1 :(得分:2)

或者,您可以使用constructed attribute tokenGroups和基本范围的查询:

$tokenGroups = Get-ADUser -SearchScope Base -SearchBase '<account-distinguishedName>' `
-LDAPFilter '(objectClass=user)' -Properties tokenGroups | Select-Object `
-ExpandProperty tokenGroups | Select-Object -ExpandProperty Value