我正在构建一个显示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个子组。可能我不知道如何使用函数。
如何使这些脚本工作或制作类似的东西?
答案 0 :(得分:0)
要直接回答有关如何使该脚本生效的问题,请按以下方式调用该函数:
Get-GroupHierarchy "Administrators"
但如果你在论坛帖子中进一步阅读,有人会注意到函数的问题......循环引用。鉴于此:
Group1 -GroupA -GroupX
-GroupB -GroupY
-Group1
该功能永远不会完成。它将获得Group1的成员,然后是GroupA,然后是GroupX。在GroupX之后,它将不再有任何嵌套组,因此它将向下移动到GroupB,然后向下移动到GroupY,然后再移到Group1,它将再次在GroupA上启动。它会循环,然后结束。我从来没有尝试过,所以我不知道它是否可以用AD组完成,但是如果你可以将组嵌套在自己嵌套的组中,那么这会给你带来麻烦。