【问题标题】:Append values to Powershell object将值附加到 Powershell 对象
【发布时间】:2016-09-15 21:02:55
【问题描述】:

我有一个 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 类型
---- ---- ----
   1 11 新
   1 12 新
   1 13 新
   1 14 新
...

【问题讨论】:

    标签: powershell object powershell-4.0


    【解决方案1】:

    使用 PS自定义对象:

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

    【讨论】:

    • 谢谢,我如何将它保存到一个对象并在我的脚本中的某个地方使用它。我厌倦了将它保存为一个对象,但它只保存了最后一个元素。
    • PSOjbectPSCustomObject 没有区别(除非您想使用类型加速器)。重点是在循环内部创建(和输出)新对象。可以通过将管道输出分配给一个变量来捕获该列表:$list = 1..10 | % {...}
    • 我已更新示例以保存到变量 $values 中。我得到了不同的结果@AnsgarWiechers,自己尝试将pscustomobject 替换为psobject
    • 您使用的是type accelerator,所以是的,您得到了不同的结果。使用New-Object,结果会一样。
    • @AnsgarWiechers,是的,但试试这个:New-Object -Type PSObject | GM。即使您要求一个 PSObject,它也会返回一个 PSCustomObject。这方面的特殊情况比比皆是。
    【解决方案2】:

    您想要的输出是对象的列表,而不是单个对象。您可以通过在循环内创建对象来生成它。 @Burt_Harris 已经向您展示了一种方法(使用类型加速器 [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 = ...) 来捕获对象列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多