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]]。 –