【问题标题】:Adding values from two arrays into a PSCustomObject将两个数组中的值添加到 PSCustomObject
【发布时间】:2022-01-24 12:23:54
【问题描述】:

我正在尝试使用 PSCustomObject 将两个数组中的值组合到一个表中。

一个数组有密码,一个数组有用户。

当我尝试将它们组合到 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 上使用 += 时,会出现错误:

方法调用失败,因为 [System.Management.Automation.PSObject] 不包含名为“op_Addition”的方法。

任何想法我做错了什么?

【问题讨论】:

    标签: arrays powershell pscustomobject


    【解决方案1】:

    不使用+=,只需将循环的所有输出分配给一个变量(另请注意,您可能希望索引到$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]
        }
      }
    

    【讨论】:

      【解决方案2】:

      $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]
          }    
      }
      

      【讨论】:

      • 您不会使用+= 将元素添加到ArrayList
      • 谢谢,这也有效!
      猜你喜欢
      • 2021-11-12
      • 2021-09-27
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2012-02-24
      相关资源
      最近更新 更多