2016-06-08 38 views
3

Dies ist mein Code:psobject Array in Power

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

Mit diesem Code Ich bin in der Lage ein Ergebnis wie dieses haben:

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

Nun, es ist gut, aber wie es zu erreichen einfacher und ordentlicher? Gibt es eine Möglichkeit, Array PsObject vielleicht zu erstellen?

Ich benutze Powershell v4.

Antwort

3

Ich mag die PSCustomObject Umwandlung in einen hashtable:

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

Sie können die for Schleife $a


nur abtreten oder in einem Einzeiler:

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

hinzugefügt Nur, dass zu meiner antwort eigentlich, siehe edit :) – briantist

+0

arg, okay ich habe eine einzeilige lösung hinzugefügt. –

+0

Schön! Ich mochte auch die Loop-Zuweisung. – briantist

4

Es ist nichts falsch an dem, was Sie tun, aber Sie können einige Vorteile nutzen.

Der -PassThru Parameter auf Add-Member kehrt das Objekt selbst, so dass Sie diese Kette:

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

Sie können eine [hashtable] von Eigenschaften bieten zunächst hinzuzufügen:

$a = @() 

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

    $a += $item 
} 

Ebenso können Sie Verwenden Sie den Beschleuniger [PSCustomObject]:

$a = @() 

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

    $a += $item 
}