我试图根据某些条件创建一个包含字段的对象数组。 我有代码:
$Array = @(1,2,3,4,5,6,3,4,5,7,9,0,8,9)
$CurrentFolder = Split-Path -parent $MyInvocation.MyCommand.Definition
$Report = @()
foreach($Item in $Array)
{
$Obj = New-Object PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Item" -Value $Item
switch ($Item)
{
1 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_1" -Value "Value_Field_1"}
2 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_2" -Value "Value_Field_2"}
3 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_3" -Value "Value_Field_3"}
4 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_4" -Value "Value_Field_4"}
5 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_5" -Value "Value_Field_5"}
6 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_6" -Value "Value_Field_6"}
7 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_7" -Value "Value_Field_7"}
8 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_8" -Value "Value_Field_8"}
9 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_9" -Value "Value_Field_9"}
0 { $Obj | Add-Member -MemberType NoteProperty -Name "Field_0" -Value "Value_Field_0"}
}
$Report = $Report + $Obj
}
$Report | ft -autosize
#$Report | Get-member
当我执行此代码时,我只获得两个属性。 Item
和Field_1
,我得到属性Field_1
,因为数字1是数组变量的第一项。
我想获得一个包含所有属性Field_0
到Field_9
的数组及其值,如果它们是空的或不是。
我使用哈希表尝试了这个,但我得到了相同的结果。
答案 0 :(得分:1)
您必须创建对象的每个属性(不在交换机中)。然后,您可以访问实际属性并分配它,而不是使用开关:
$Array = @(1,2,3,4,5,6,3,4,5,7,9,0,8,9)
$CurrentFolder = Split-Path -parent $MyInvocation.MyCommand.Definition
$Report = @()
foreach($Item in $Array)
{
$Obj = New-Object PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Item" -Value $Item
$Obj | Add-Member -MemberType NoteProperty -Name "Field_1" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_2" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_3" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_4" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_5" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_6" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_7" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_8" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_9" -Value $null
$Obj | Add-Member -MemberType NoteProperty -Name "Field_0" -Value $null
$obj."Field_$Item" = $Item
$Report = $Report + $Obj
}
$Report | ft -autosize
<强>输出:强>
Item Field_1 Field_2 Field_3 Field_4 Field_5 Field_6 Field_7 Field_8 Field_9
---- ------- ------- ------- ------- ------- ------- ------- ------- -------
1 1
2 2
3 3
4 4
5 5
6 6
3 3
4 4
5 5
7 7
9 9
0
8 8
9 9
注意:如果您使用的是PowerShell&gt; 2,你也可以实现相同的使用:
$Report = @(1,2,3,4,5,6,3,4,5,7,9,0,8,9) | ForEach-Object {
$Obj = [PsCustomObject]@{
Item = $_
Field_1 = $null
Field_2 = $null
Field_3 = $null
Field_4 = $null
Field_5 = $null
Field_6 = $null
Field_7 = $null
Field_8 = $null
Field_9 = $null
Field_0 = $null
}
$Obj."Field_$_" = $_
$Obj
}
$Report | ft -autosize