这是我的代码:
$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
。
答案 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
}