我的第一个问题。 我有一个包含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个属性)对它们进行排序,然后根据不同的属性执行不同的操作
答案 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
}
}