2016-03-24 33 views
6

Gdybym to zrobićJak można dodać więcej wartości nieruchomości do niestandardowego obiektu

$account = New-Object -TypeName psobject -Property @{User="Jimbo"; Password="1234"} 

Jak dodać dodatkowych użytkownika i hasło wartości $account bez nadpisania istniejącego?

Nie mogę wstępnie wypełnić $account z hashtable. Nie znam wszystkich użytkowników i haseł w czasie wykonywania.

+0

Chyba musimy zobaczyć przykład, kim jesteś próbować zrobić. Dodawanie nowych właściwości jest łatwiejsze, jeśli zbudujesz tabelę mieszania przed 'nowym obiektem'. '$ props = @ {User =" Jimbo "; Password = "1234"}; $ props.NewProperty = "Yeah" ' – Matt

+1

Mam ochotę zaznaczyć to jako dupe: http://stackoverflow.com/questions/17353797/powershell-how-to-initialize-array-of-custom-objects – Matt

Odpowiedz

3

Jeśli chcesz użyć $account do przechowywania użytkownika + PWD poświadczenia, należy zadeklarować ją jako array i dodawać elementy, jeśli chcesz:

$account = @() 
$account += New-Object -TypeName psobject -Property @{User="Jimbo"; Password="1234"} 
$account += New-Object -TypeName psobject -Property @{User="Jimbo2"; Password="abcd"} 
$account += New-Object -TypeName psobject -Property @{User="Jimbo3"; Password="idontusepwds"} 

Wyjście $account:

User Password  
---- --------  
Jimbo 1234   
Jimbo2 abcd   
Jimbo3 idontusepwds 
+0

Fantastyczny. Dzięki. Zaznaczę to jako odpowiedź po upływie czasu oczekiwania. – ATtheincredibleaf

+2

@ATtheincredibleaf Twoje pytanie dotyczyło dodawania wartości nieruchomości? Ta odpowiedź pokazuje, jak zbudować tablicę obiektów. – Matt

+0

Utworzę ją w pętli i unikam '+ ='. Czy jesteś ograniczony do PowerShell 2.0? – Matt

9

Parametr -Property parametru New-Object przyjmuje argument hashtable jako argument. Możesz dodać właściwości dodane w określonej kolejności, jeśli uporządkujesz tablice. Jeśli chcesz, aby rozwinąć listę właściwości w momencie tworzenia wystarczy dodać kolejne pozycje do hashtable:

$ht = [ordered]@{ 
    'Foo' = 23 
    'Bar' = 'Some value' 
    'Other Property' = $true 
    ... 
} 

$o = New-Object -Type PSObject -Property $ht 

Jeśli chcesz dodać więcej właściwości po obiekt został utworzony, można to zrobić za pośrednictwem Add-Member cmdletu :

$o | Add-Member -Name 'New Property' -Type NoteProperty -Value 23 
$o | Add-Member -Name 'something' -Type NoteProperty -Value $false 
... 

lub poprzez calculated properties:

$o = $o | Select-Object *, @{n='New Property';e={23}}, @{n='something';e={$false}}