列出Active Directory组层次结构

时间:2014-05-30 09:41:51

标签: powershell recursion hierarchy active-directory-group members

我正在构建一个显示Active Directory组层次结构的脚本。

不幸的是简单的Get-ADGroupMember $ group -Recursive只列出成员,而不是组。

示例:

Group1是主要组 - 它有3个子组,名为GroupA,B,C。所以GroupA,B,C是MemberOf Group1。

GroupA没有子组

GroupB有2个名为subGroup1,2

的子组

GroupC有一个名为subGroup3

的子组

subGroup1,2,3没有子组

理想情况下输出这样的东西会很棒:

Level1 Level2 Level3   Level4
Group1 GroupA 
       GroupB subGroup1
              subGroup2
       GroupC subGroup3

当然我用Google搜索了它,我发现了两个网站:

http://powershell.com/cs/forums/p/9588/15894.aspx

http://www.experts-exchange.com/Programming/Languages/Scripting/Powershell/Q_27346526.html

理解它们的范围很小,在第一个链接中有简单的脚本。

function Get-GroupHierarchy ($searchGroup)
{
    import-module activedirectory
    $groupMember = get-adgroupmember $searchGroup | sort-object objectClass -descending
       foreach ($member in $groupMember)
        {Write-Host $member.objectclass,":", $member.name;
        if ($member.ObjectClass -eq "group")
            {Get-GroupHierarchy $member.name}}
} 

我将$searchGroup = "Administrators"放在脚本之前,但脚本没有显示任何结果。如果我做Get-ADGroupMember,它有3个子组。可能我不知道如何使用函数。

如何使这些脚本工作或制作类似的东西?

1 个答案:

答案 0 :(得分:0)

要直接回答有关如何使该脚本生效的问题,请按以下方式调用该函数:

Get-GroupHierarchy "Administrators"

但如果你在论坛帖子中进一步阅读,有人会注意到函数的问题......循环引用。鉴于此:

Group1    -GroupA    -GroupX
          -GroupB    -GroupY
                     -Group1

该功能永远不会完成。它将获得Group1的成员,然后是GroupA,然后是GroupX。在GroupX之后,它将不再有任何嵌套组,因此它将向下移动到GroupB,然后向下移动到GroupY,然后再移到Group1,它将再次在GroupA上启动。它会循环,然后结束。我从来没有尝试过,所以我不知道它是否可以用AD组完成,但是如果你可以将组嵌套在自己嵌套的组中,那么这会给你带来麻烦。