【问题标题】:Storing function results into dynamic variable将函数结果存储到动态变量中
【发布时间】:2018-02-15 04:53:13
【问题描述】:

我正在处理 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 数组中。我知道我可以全部手动编写,但我想知道是否有动态的方法。


谢谢大家

【问题讨论】:

  • 在您的代码中,您将返回 $object。但是,$object 没有在任何地方定义。
  • 抱歉,$array 已更改
  • $FinalArray += Extract-Users $group $Admins
  • Get-ADGroupMember -Recursive?
  • 用于通过引用see here传递参数。

标签: .net powershell active-directory


【解决方案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 $array 参数被使用并且函数执行的操作被添加到传递下来的现有数组中。

您可以将返回值用于任何其他目的或完全忽略它。

简单演示

在这里,我的提取用户实际上使用了 $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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多