我正在处理AD嵌套组并需要一些帮助。
以下是代码:
function Extract-Users($group, $array) {
$members = Get-ADGroupMember -Identity $group.Name
foreach ($member in $members) {
if ($member.objectClass -eq "user") {
$Admin = New-Object PSObject
$Admin | Add-Member -Type NoteProperty -Name User -Value $user.Name
$Admin | Add-Member -Type NoteProperty -Name Group -Value $group.Name
$array += $Admin
Remove-Variable Admin
return $array
} elseif ($member.objectClass -eq "group"){
Extract-Users $member, $object
}
}
}
问题在于我希望能够像这样调用函数:
$ADGroups = Get-ADGroup -Filter {Name -like "*admin*"}
$Admins = @()
foreach ($group in $ADGroups) {
Extract-Users $group $Admins
}
将函数中创建的所有对象存储到我抛入函数的变量中。这样我提取的所有用户都存储在$ Admins数组中。我知道我可以把它全部写成手册,但我想知道是否有一种动态的方法。
谢谢你们
答案 0 :(得分:1)
我不相信可以使用存储在变量中的动态函数,但我相信你可以使用byref参数获得所需的结果。
简单示例
$Users = @()
function Extract-Users{
Param([Parameter(Mandatory=$true)]$group,
[Parameter(Mandatory=$true)][ref]$array)
$array.Value += (Get-Random)
return $array.Value.count
}
这样,使用了Extract-Users $数组参数,并将该函数执行的操作添加到传递的现有数组中。
您可以将返回值用于任何其他目的或完全忽略它。
简单演示
在这里,我的extract-users实际上使用$ array参数并为其添加一个随机数。但是,您可以添加用户。
cls
$group = 'something'
Write-host 'Users count:' (Extract-Users $group ([ref]$Users))
Write-Host '$Users variable content'
$Users | ft
Write-host 'Users count:' (Extract-Users $group ([ref]$Users))
Write-host 'Users count:' (Extract-Users $group ([ref]$Users))
Write-host 'Users count:' (Extract-Users $group ([ref]$Users))
Write-Host ([Environment]::NewLine)
Write-Host 'Here is the $Users variable content'
$Users | ft
需要注意的重点是你需要传递参数([ref] $ MyParam)而不仅仅是$ MyParam,而且在函数中,你想要更新.value属性而不是变量本身。
编辑: 好吧,正如Rohin在OP问题中指出的那样,看似简单
$FinalArray += Extract-Users $group $Admins
完美地完成这个伎俩。
如果您需要返回值不同(例如获取布尔结果成功/错误状态或获取用户或其他任何内容的数量,[ref]将非常适合t