我正在寻找一个可显示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/