powershell新手,我在powershell脚本中有2个pscustomobject,我想把它们合二为一,输出到csv中。问题是两者都没有匹配的键列,只是想把它们附加在一起。我可以使用下面的代码,但它没有正确显示数据。有什么建议吗?(附上的样本)
$result=[pscustomobject]($a+$b)
twh00eeo1#
看起来您要做的是将两个对象中的properties合并为一个对象。你可以通过内部成员PSObject访问一个对象的属性和属性值,在这种情况下,你需要枚举两个对象($a和$b)的所有属性,并将它们放在一个有序字典中,最后将[pscustomobject]强制转换为一个新的 merged 对象,这个函数可以简化这个过程。
PSObject
$a
$b
[pscustomobject]
function Merge-PSCustomObject { param( [Parameter(Mandatory)] [Object] $LeftObject, [Parameter(Mandatory)] [Object] $RigthObject ) end { $result = [ordered]@{} foreach($property in @($LeftObject.PSObject.Properties; $RigthObject.PSObject.Properties)) { $result[$property.Name] = $property.Value } [pscustomobject] $result } } $a = [pscustomobject]@{ foo = 'hello' } $b = [pscustomobject]@{ bar = 'world'; baz = 123 } Merge-PSCustomObject -LeftObject $a -RigthObject $b
如果两侧都有对象数组,假设两个数组的对象数相同,则可以使用for loop合并两个数组中的每个对象,例如:
for
$a = [pscustomobject]@{ foo = 'hello' } $b = [pscustomobject]@{ bar = 'world'; baz = 123 } $arr1 = 0..3 | ForEach-Object { $a } $arr2 = 0..3 | ForEach-Object { $b } $result = for($i = 0; $i -lt $arr1.Count; $i++) { Merge-PSCustomObject $arr1[$i] $arr2[$i] }
bjp0bcyl2#
查看以下内容是否有效:
for($i = 0; $i -lt $a.Count; $i++) { $a[$i] | Add-Member -NotePropertyName Sample3 -NotePropertyValue $b[$i].Sample3 }
2条答案
按热度按时间twh00eeo1#
看起来您要做的是将两个对象中的properties合并为一个对象。
你可以通过内部成员
PSObject
访问一个对象的属性和属性值,在这种情况下,你需要枚举两个对象($a
和$b
)的所有属性,并将它们放在一个有序字典中,最后将[pscustomobject]
强制转换为一个新的 merged 对象,这个函数可以简化这个过程。如果两侧都有对象数组,假设两个数组的对象数相同,则可以使用
for
loop合并两个数组中的每个对象,例如:bjp0bcyl2#
查看以下内容是否有效: