比较 2 个对象属性数组,将 属性 添加到 1 个对象

Comparing 2 arrays of objects properties, adding property to 1 object

这是我的第一个问题。 我有一个包含 2 个对象数组的脚本,其中对象 1 中的 1 属性 与对象 2 中的 1 属性 匹配。当属性匹配时,对象 1 会根据 [=21= 得到一个新的 属性 ] 在对象 2 中。 属性的范围可以是大约 5-20 个不同的属性,并且持有 object1 的数组可以轻松包含 100 多个对象,所以如果有比双循环更好的方法来做到这一点,那会很棒,但我对 handling/comparing 这样的对象。

到目前为止我有这个,但它似乎不起作用。

foreach ($vm in $vms)
 {
 foreach ($csv in $csvs)
  {
  if ($vm.location -eq $csv.ownerNode)
    {$vm = $vm | Add-Member -MemberType NoteProperty -Name csv -Value $csv.name}   
  }
 }

编辑以获取更多背景信息,并进一步发布 我选择使用对象的原因是我需要在脚本运行时添加越来越多的属性,然后在最后使用它们(每个对象大约 4-5 个属性)对它们进行排序,然后根据不同的属性执行不同的操作.

如果您需要 $csvs 中的对象的唯一属性是 OwnerNodeName 属性,您可以通过以下方式加快进程(并限制内存占用)创建一个 hashtable,它使用 OwnerNode 作为它的键,Name 作为它的值(假设两个属性都是 string 类型):

$CsvLookup = @{}

$csvs |Foreach-Object {
    $CsvLookup[$_.OwnerNode] = $_.Name
}

# No need for this anymore
Remove-Variable csvs

foreach($vm in $vms){
    if($CsvLookup.ContainsKey($VM.Location)){
        $vm = $vm |Add-Member -MemberType NoteProperty -Name CSV -Value $CsvLookup[$VM.Location] -PassThru
    }
}