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

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

例:

Group1是主要组-它具有3个名为GroupA,B,C的子组。因此,GroupA,B,C是Group1的成员。

GroupA没有子组

GroupB有2个名为subGroup1,2的子组

GroupC有1个子组,名为subGroup3

subGroup1,2,3没有子组

理想情况下,输出以下内容将是很棒的:

Level1 Level2 Level3   Level4
Group1 GroupA
       GroupB subGroup1
              subGroup2
       GroupC subGroup3

当然,我已经对其进行了Google搜索,发现了两个Web站点:

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个子组。可能我不知道如何使用函数。

如何使这些脚本正常工作或进行类似的处理?

最佳答案

要直接回答有关如何使该脚本起作用的问题,可以这样调用函数:

Get-GroupHierarchy "Administrators"

但是,如果您在论坛帖子中进一步阅读,就会有人注意到该功能存在问题...循环引用。鉴于这种:
Group1    -GroupA    -GroupX
          -GroupB    -GroupY
                     -Group1

该功能将永远无法完成。它将获取Group1的成员,然后是GroupA,然后是GroupX。在GroupX之后,它将不再有嵌套的组,因此它将移至GroupB,然后移至GroupY,然后移至Group1,然后再次从GroupA开始。它会一遍又一遍地循环。我从来没有尝试过,所以我不知道它是否可以用AD组完成,但是如果您可以将组嵌套在自己内部嵌套的组中,则会给您带来麻烦。

关于powershell - 列出Active Directory组层次结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23951475/

10-15 22:10