将值附加到 Powershell 对象

Append values to Powershell object

我有一个 PS 对象,但无法找到将值附加到我的对象的方法。

$object = New-Object PSObject
Add-Member -InputObject $object -MemberType NoteProperty -Name Col1 -Value ""
Add-Member -InputObject $object -MemberType NoteProperty -Name Col2 -Value ""
Add-Member -InputObject $object -MemberType NoteProperty -Name Type -Value ""
1..10 |ForEach{
    $src=$_
    11..20 | ForEach{
        $dst = $_
        $object.Col1=$src
        $object.Col2=$dst
        $object.Type="New"
    }    
}

我希望我的结果像

col1  col2  Type
----  ----  ----
   1    11  New
   1    12  New
   1    13  New
   1    14  New
...

使用PS自定义对象:

$values = 1..10 | % { 
   [pscustomobject]@{ col1=1; col2=10+$_; Type="New" }
   }

您想要的输出是对象的列表,而不是单个对象。您可以通过在循环内创建对象来生成它。 已经向您展示了一种方法(使用类型加速器 [PSCustomObject]),当然您也可以使用 New-Object 达到相同的目的:

$list = 1..10 | ForEach-Object {
    $src = $_
    11..20 | ForEach-Object {
        $prop = @{
            Col1 = $src
            Col2 = $_
            Type = 'New'
        }
        New-Object -Type PSObject -Property $prop
    }
}

如果您希望属性以特定顺序出现在输出中(仅限 PowerShell v3 和更新版本),请将 属性 哈希表创建为有序哈希表:

$prop = [ordered]@{
    Col1 = $src
    Col2 = $_
    Type = 'New'
}

可以通过将管道输出分配给变量 ($list = ...) 来捕获对象列表。