powershell 中的 PsObject 数组
PsObject array in powershell
这是我的代码:
$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
。
你所做的没有错,但你可以利用一些东西。
Add-Member
上的 -PassThru
参数将 return 对象本身,因此您可以链接它们:
$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
}
我喜欢 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';}}
这是我的代码:
$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
。
你所做的没有错,但你可以利用一些东西。
Add-Member
上的 -PassThru
参数将 return 对象本身,因此您可以链接它们:
$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
}
我喜欢 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';}}