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

时间:2015-08-05 12:03:09

标签: arrays powershell object comparison

我的第一个问题。 我有一个包含2个对象数组的脚本,其中object1的1个属性与对象2的1个属性匹配。当属性匹配时,object1根据object2中的属性获取新属性。 属性范围可以是大约5-20个不同的属性,并且持有object1的数组可以容易地包含100个以上的对象,所以如果有更好的方法来做除了双循环以外会很好,但我仍然是处理/的新手以这种方式比较对象。

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

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个属性)对它们进行排序,然后根据不同的属性执行不同的操作

1 个答案:

答案 0 :(得分:0)

如果$csvs中对象所需的唯一属性是OwnerNode然后Name属性,则可以通过创建一个属性来加快进程(并限制内存占用) 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
    }
}