繁体   English   中英

Append 2 pscustomobjects 到 1

[英]Append 2 pscustomobjects into 1

在此处输入图像描述

我是 powershell 的新手。我在 powershell 脚本中有 2 个 pscustomobjects。 我想把它们作为一个和 output 合并成 csv。

问题是两者都没有匹配的键列,只想将 append 它们放在一起。 我能够使用以下代码,但它没有正确显示数据。 有什么建议么? (附样品)

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

看来您要做的是将两个对象的属性合并为一个。

您可以通过内部成员PSObject访问 object 的属性和属性值,在这种情况下,您需要枚举两个对象( $a$b )的所有属性并将它们一起放入有序字典中,最后将[pscustomobject]结果得到一个新的合并object。 这个 function 可以为您简化该过程。

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

如果你在两边都有一个对象数组,假设两个 arrays 都有相同的对象数,你可以使用一个for循环来合并两个 arrays 中的每个 object,例如:

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

查看以下是否有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM