PowerShell中的PsObject数组

时间:2016-06-08 14:19:30

标签: powershell powershell-v4.0

这是我的代码:

$a = @()

for ($i = 0; $i -lt 5; $i++)
{

$item = New-Object PSObject
$item | Add-Member -type NoteProperty -Name 'Col1' -Value 'data1'
$item | Add-Member -type NoteProperty -Name 'Col2' -Value 'data2'
$item | Add-Member -type NoteProperty -Name 'Col3' -Value 'data3'
$item | Add-Member -type NoteProperty -Name 'Col4' -Value 'data4'

$a += $item
}

使用此代码,我可以得到如下结果:

Col1 Col2 Col3 Col4
---- ---- ---- ----
   0    1    2    3
   1    2    3    4
   2    3    4    5
   3    4    5    6
   4    5    6    7

嗯,这很好,但如何更简单,更合适地实现呢?有没有办法创建数组PsObject

我正在使用Powershell v4

2 个答案:

答案 0 :(得分:6)

我喜欢将PSCustomObject投射到hashtable

$a = for ($i = 0; $i -lt 5; $i++){
    [PSCustomObject] @{
        Col1 = 'data1'
        Col2 = 'data2'
        Col3 = 'data3'
        Col4 = 'data4'    
        }
}

您只需将for循环指定给$a

即可

或者在单行中:

$a = 1 .. 5 | % { [PSCustomObject] @{Col1 = 'data1'; Col2 = 'data2';Col3 = 'data3';Col4 = 'data4';}}

答案 1 :(得分:5)

你所做的事情没有错,但你可以利用一些事情。

-PassThru上的Add-Member参数将返回对象本身,因此您可以链接它们:

$a = @()

for ($i = 0; $i -lt 5; $i++)
{
    $item = New-Object PSObject |
    Add-Member -type NoteProperty -Name 'Col1' -Value 'data1' -PassThru |
    Add-Member -type NoteProperty -Name 'Col2' -Value 'data2' -PassThru |
    Add-Member -type NoteProperty -Name 'Col3' -Value 'data3' -PassThru |
    Add-Member -type NoteProperty -Name 'Col4' -Value 'data4' -PassThru

    $a += $item
}

您可以提供最初添加的[hashtable]个属性:

$a = @()

for ($i = 0; $i -lt 5; $i++)
{
    $item = New-Object PSObject -Property @{
        Col1 = 'data1'
        Col2 = 'data2'
        Col3 = 'data3'
        Col4 = 'data4'
    }

    $a += $item
}

同样,您可以使用[PSCustomObject]类型加速器:

$a = @()

for ($i = 0; $i -lt 5; $i++)
{
    $item = [PSCustomObject]@{
        Col1 = 'data1'
        Col2 = 'data2'
        Col3 = 'data3'
        Col4 = 'data4'
    }

    $a += $item
}