将两个数组中的值添加到 PSCustomObject

Adding values from two arrays into a PSCustomObject

我正在尝试使用 PSCustomObject 将两个数组的值组合成 table。

一组是密码,一组是用户。

当我尝试将它们组合成 PSCustomObject 数组时,它只列出数组中的最后一个值,而不是列表。

我试过几个不同的版本:

for ($i = 0; $i -lt $users.Length; $i++) {$myObject = [PSCustomObject] @{name = $users.name[$i]; User = $users.samaccountname[$i]; Mail = $users.mail[$i]; Password = $passwords[$i]}}

foreach ($psw in $passwords) {$users | % {$myObject = [PSCustomObject] @{name = $PSItem.name; User = $PSItem.samaccountname; Mail = $PSItem.mail; Password = $psw}}}

当我尝试在 $myobject 上使用 += 时出现错误:

Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.

知道我做错了什么吗?

而不是使用 +=,只需将循环的所有输出分配给一个变量(另请注意,您可能希望索引到 $users 而不是合成集合你从 $users.name 等得到 - 否则如果任何 属性 包含多个值,它将中断):

$myObjects =
  for ($i = 0; $i -lt $users.Length; $i++) {
    [PSCustomObject] @{
      Name = $users[$i].name
      User = $users[$i].samaccountname 
      Mail = $users[$i].mail
      Password = $passwords[$i]
    }
  }

$myobject上使用+=时出现的错误是因为$myobject是自定义类型(没有实现'op_Addition'方法)。

您可以使用实现了此方法的对象,例如 ArrayList,如下所示:

$myObject = New-Object -TypeName "System.Collections.ArrayList"

for ($i = 0; $i -lt $users.Length; $i++) {
    $myObject += [PSCustomObject] @{
        Name = $users[$i].name
        User = $users[$i].samaccountname 
        Mail = $users[$i].mail
        Password = $passwords[$i]
    }    
}