ura*_*gus 2 powershell merge pscustomobject
我想使用 PowerShell 将两个表合并为一个。
#Sample table
$CarList1 = @()
$CarList2 = @()
$CarList1 = [PSCustomObject]@{
"Brand" = "Audi";
"Model" = "A8";
"Color" = "Red";
"ManufactureDate" = "2000.11.01"
}
$CarList2 = [PSCustomObject]@{
"Brand" = "Audi";
"Model" = "A4";
"Color" = "Green";
"ManufactureDate" = "1998.11.01"
}
Run Code Online (Sandbox Code Playgroud)
我想将 $CarList2 的数据传输到 $CarList1
最后我希望将所有数据放在一张表中。
Brand Model Color ManufactureDate
----- ----- ----- ---------------
Audi A8 Red 2000.11.01
Audi A4 Green 1998.11.01
Run Code Online (Sandbox Code Playgroud)
我尝试过各种事情......
foreach ($property in $CarList2.psobject.Properties) {
foreach ($array in $CarList2.$($property.Name)) {
$CarList1.$($property.Name) += $array
}
}
Run Code Online (Sandbox Code Playgroud)
$CarList1 += $CarList2
...
Run Code Online (Sandbox Code Playgroud)
我希望你能帮助我,我无法让它工作。
$CarList1 += $CarList2
这只在 is$CarList1 已经是一个 array 的情况下才有效,但这里的情况并非如此,因为即使您尝试使用 来将其初始化为数组,但考虑到后续赋值用单个对象替换了该值,$CarList1 = @()初始化也没有任何效果。$CarList1 = [PSCustomObject]@{ ... }
在不触及其他代码的情况下,最简单的解决方案是对复合赋值使用类型约束,如果需要,它会隐式转换$CarList1为数组,并且另外确保将来分配的任何值也将转换为[array]( [object[]]) :
# OK: Array concatenation, thanks to the [array] type constraint.
[array] $CarList1 += $CarList2
Run Code Online (Sandbox Code Playgroud)
请注意,为了使+运算符执行数组串联, LHS是一个数组就足够了;如果 RHS 不是,则将其作为单个元素附加到输出数组;如果是,则将其元素一一附加。
从上面可以看出,如果您(至少)使用这样的类型约束进行初始化,则可以按原样工作:$CarList1$CarList1 += $CarList2
# Initialize the variables as empty arrays and *type-constrain* them as arrays.
[array] $CarList1 = @()
[array] $CarList2 = @()
# Now, even assigning a *single* object causes an *array* to
# be stored, with on-demand conversion.
$CarList1 = [PSCustomObject]@{
"Brand" = "Audi";
"Model" = "A8";
"Color" = "Red";
"ManufactureDate" = "2000.11.01"
}
# Ditto
$CarList2 = [PSCustomObject]@{
"Brand" = "Audi";
"Model" = "A4";
"Color" = "Green";
"ManufactureDate" = "1998.11.01"
}
# Since (at least) $CarList1 now is an array, array concatenation
# now succeeds.
$CarList1 += $CarList2
Run Code Online (Sandbox Code Playgroud)
当然,在这个例子中,您可以不使用单独的初始化语句,只需执行以下操作:
[array] $CarList1 = [pscustomobject] @{ ... }, ...@(...), 数组子表达式运算符来确保您的单个对象成为数组:
$CarList1 = @([pscustomobject] @{ ... })| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |