【发布时间】:2017-05-24 12:11:21
【问题描述】:
我们在组成员的活动目录中具有以下结构:
BEL Test Top level
- BEL Test Sub level 1
- Bob
- BEL Test Sub level 1.1
- Jake
- Mike
- BEL Test Sub level 2
- BEL Test Sub level 2.1
想要的输出:
GroupName : BEL Test Top level
Member1 : BEL Test Sub level 1
Member2 : BEL Test Sub level 1.1
Member3 : Jake
GroupName : BEL Test Top level
Member1 : BEL Test Sub level 1
Member2 : BEL Test Sub level 1.1
Member3 : Mike
GroupName : BEL Test Top level
Member1 : BEL Test Sub level 1
Member2 : Bob
GroupName : BEL Test Top level
Member1 : BEL Test Sub level 2
Member2 : BEL Test Sub level 2.1
因此,对于每个最深的对象,都需要有一个 [PSCustomObject] 作为输出。我不是递归函数方面的专家,但我编写的以下代码非常接近:
$Name = 'BEL Test Top level'
$hash = $null
Function Add-MemberGroupHC {
Param (
[Parameter(Mandatory, ValueFromPipeline)]
$Identity,
$Past,
[Int]$Level
)
Begin {
if (-not $Level) {
$Level = 0
}
if (-not $Past) {
$Past = [Ordered]@{
GroupName = $Name
}
}
if ($Identity.GetType().Name -ne 'ADPrincipal') {
$Identity = Get-ADGroup -Identity $Identity
}
}
Process {
$Level++
Write-Verbose "Check members '$($Identity.Name)'"
$Members = Get-ADGroupMember $Identity
$Members | ForEach-Object {
Write-Verbose "Add property '$('Member' + $Level)' value '$($_.Name)'"
$Past.('Member' + $Level) = $_.Name
if (($_.ObjectClass -eq 'User') -or (-not (Get-ADGroupMember $_))) {
[PSCustomObject]$Past
}
$Past.('Member' + $Level) = $_.Name
[PSCustomObject]$Past
}
if ($_.ObjectClass -eq 'Group') {
Add-MemberGroupHC -Identity $_ -Past $Past -Level $Level
}
}
}
}
$Result = Add-MemberGroupHC $Name
$Result | fl *
在没有孩子的情况下调用自己时,怎么可能只输出最深的层次?
【问题讨论】:
-
您当前的输出是什么?另外,我认为您缺少
else或在倒数第二个 if 块中有一个额外的括号。可能是复制粘贴错误?
标签: powershell recursion