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
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
及其值如果它们是空的或不是。
我试过这个使用哈希表,但我得到了同样的结果。
缺点ider'New-Object psobject -Property @ {Item = $ Item; ...}而不是'Add-Member'(非常慢) –
@Martin,你注意到表中没有输出中的“Field_0”并且只有Field_1和Item是Int32类型吗?为什么? – LotPings
@LotPings这可能是因为有很多列,最后一个被截断。但是,如果您省略'| ft -autosize'管道,那么您可以看到该字段。要强制所有项目是一个整数,你可以在每个字段前写入[[int]]。 –