比较 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
中的对象的唯一属性是 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
}
}
这是我的第一个问题。 我有一个包含 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
中的对象的唯一属性是 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
}
}