powershell 将2个pscomustom对象追加到1个中

bzzcjhmw  于 2022-12-26  发布在  Shell
关注(0)|答案(2)|浏览(131)

powershell新手,我在powershell脚本中有2个pscustomobject,我想把它们合二为一,输出到csv中。
问题是两者都没有匹配的键列,只是想把它们附加在一起。我可以使用下面的代码,但它没有正确显示数据。有什么建议吗?(附上的样本)

$result=[pscustomobject]($a+$b)
twh00eeo

twh00eeo1#

看起来您要做的是将两个对象中的properties合并为一个对象。
你可以通过内部成员PSObject访问一个对象的属性和属性值,在这种情况下,你需要枚举两个对象($a$b)的所有属性,并将它们放在一个有序字典中,最后将[pscustomobject]强制转换为一个新的 merged 对象,这个函数可以简化这个过程。

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合并两个数组中的每个对象,例如:

$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]
}
bjp0bcyl

bjp0bcyl2#

查看以下内容是否有效:

for($i = 0; $i -lt $a.Count; $i++)
{
   $a[$i] | Add-Member -NotePropertyName Sample3 -NotePropertyValue $b[$i].Sample3
}

相关问题