2014-05-08 32 views
6

我试图让所有的组的用户是成员,甚至嵌套的人(recusively),在PowerShell中我使用:如何使用Powershell或其他工具获取所有AD用户组(递归)?

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

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

有没有办法让它从任何AD用户? (犯规必须只在PowerShell中,或许那里有另一种工具,我不还不知道)

回答

19

可以使用LDAP_MATCHING_RULE_IN_CHAIN

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

你可以用它anywahere,您可以使用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

我在那是多么伟大惊呆了,如果我能+1这不止一次,我会。我刚刚阅读了您提供的链接中的相关文档,这对任何处理PowerShell,AD和组/成员的人都是非常有价值的知识。 – TheMadTechnician

+0

注:这似乎仅限于单域搜索库。即,如果用户是不同域中的组的成员,或者其中一个组本身是另一个域中的组的成员,则另一个域中的组不会显示/将从树中排除(即即使其他域上的组是原始域上的组的成员)。 – JohnLBevan

+0

@约瑟夫Alcorn,任何想法为什么它不显示我的“域用户”组?当我使用Get-ADPrincipalGroupMembership myUser时,它向我显示用户的组(它们之间也是“域用户”)。当我搜索:'$ dn =(Get-ADUser“myUser”)。DistinguishedName Get-ADGroup -LDAPFilter(“(member:1.2.840.113556.1.4.1941:= {0})”-f $ dn)选择-expand Name |排序名称“会忽略”域用户“组,但会显示所有其他组(也是递归的) – E235

1

或者,你可以使用constructed attributetokenGroups和基本范围的查询:

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