2015-05-08 55 views
1

我正在構建自定義PSObject數組,但我注意到沒有明顯原因正在插入大量額外空間。例如:自定義PSObject中的額外空間

PS> $user = @() 
PS> $user += New-Object PSObject -Property @{"Name" = "John Smith"} 
PS> $user += New-Object PSObject -Property @{"Age" = "18"} 
PS> $user += New-Object PSObject -Property @{"City of birth" = "New York"} 
PS> $user += New-Object PSObject -Property @{"Pet" = "none"} 
PS> "[$($user.Name)]" 
[John Smith ] 
PS> "[$($user.Pet)]" 
[ none] 

好像我添加的更多鍵/值對,將更多空間添加到這些值。任何想法,爲什麼這是?

+0

你正在建立一個數組......不應該通過'「[$數組中的元素,選擇NoteProperty Name? –

回答

0

感謝@麥克-Z的評論有關Add-Member。原來這個代碼做我想要的:

PS> $user = New-Object PSObject 
PS> $user | Add-Member -NotePropertyName "Name" -NotePropertyValue "John Smith" 
PS> $user | Add-Member -NotePropertyName "Age" -NotePropertyValue "18" 
PS> $user | Add-Member -NotePropertyName "City of birth" -NotePropertyValue "New York" 
PS> $user | Add-Member -NotePropertyName "Pet" -NotePropertyValue "none" 
2

$user是一個數組,因此$user.Name的行爲是獲取所有條目的Name屬性。由於它被放入一個字符串中,所以這些值通過空格連接在一起。因此,每次添加條目到$user時,都會在所有屬性的某處添加額外的空間。我不太確定你是否將$user定義爲數組。它會更有意義構建初始化$user爲PSObject的所有屬性和使用的哈希表:

$props = @{ "Name" = "John Smith"; "Age" = "18"; "City of birth" = "New York"; "Pet" = "none"} 
$user = New-Object PSObject -Property $props 

,或者如果你需要動態地建立一些屬性:

$props = @{ "Name" = "John Smith"; "Age" = "18"; "City of birth" = "New York"; "Pet" = "none"} 
if ($myCondition) 
{ 
    $props.PropertyA = "A" 
} 
else 
{ 
    $props.PropertyB = "B" 
} 
$user = New-Object PSObject -Property $props 

,或者如果你是從database it would probably look more like this閱讀他們:

while($reader.Read()) { 
    $props = @{} 
    for($i = 0; $i -lt $reader.FieldCount; $i+=1) { 
     $name = $reader.GetName($i) 
     $value = $reader.item($i) 
     $props.Add($name, $value) 
    } 
    $obj = new-object PSObject -Property $props 
    Write-Output $obj 
} 
+0

我知道我可以一次添加它們,但問題是我正在迭代一些數據,並且事先不知道所有屬性會是什麼。我無法將它們全部放在一行上。如果做一個數組和op_adding它們不是構建對象的正確方法,那麼我該如何構建它呢? – Dendory

+0

@Dendory查看我的更新 –

+0

您也可以稍後使用[添加成員](https://technet.microsoft.com/en-us/library/hh849879.aspx)將屬性添加到現有對象中。 –