2016-03-24 32 views
6

daha özellik değerlerini ekleyebilirim?Nasıl özel bir nesneye

Bir hashtable'dan $account önceden ekleyemiyorum. Tüm kullanıcı ve şifreleri çalışma zamanında bilmiyorum. Eğer kullanıcı + pwd kimlik bilgilerini saklamak için $account kullanmak istiyorsanız

+0

bence senin ne bir örnek görmek gerektiğini düşünüyorum yapmaya çalışmak. Yeni bir özellik eklemek, karma tabloyu "yeni nesneden" önce oluşturursanız daha kolaydır. '$ props = @ {Kullanıcı =" Jimbo "; Şifre = "1234"}; $ props.NewProperty = "Evet" – Matt

+1

Bunu bir dupe olarak işaretlemek istiyorum: http://stackoverflow.com/questions/17353797/powershell-how-to-initialize-array-of-custom-objects – Matt

cevap

3

, bir array olarak ilan ve istediğiniz zaman öğeleri eklemek gerekir:

$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"} 

Çıktı $account ait:

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

Fantastik. Teşekkürler. Zaman aşımı süresi dolduğunda bunu cevap olarak işaretleyeceğim. – ATtheincredibleaf

+2

@ATtheincredibleaf Sorunuz mülk değerleri eklemeyle ilgili miydi? Bu cevap, bir nesne dizisinin – Matt

+0

nasıl oluşturulacağını gösteriyor. Bunu bir döngü içinde yapılandıracağım ve '+ =' dan kaçınacağım. PowerShell 2.0 ile sınırlı mısınız? – Matt

9

New-Object parametresinin -Property parametresi argüman olarak bir hashtable alır. Eğer hashtable sipariş verirseniz, özelliklerin belirli bir sırada eklenmiş olabilir. Eğer oluşturma anda özelliklerinin listesini genişletmek gerekirse sadece Hashtable fazla giriş ekleyin:

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

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

nesne oluşturulduğu sonra daha fazla özellik eklemek için gerekiyorsa, Add-Member cmdlet'indeki aracılığıyla yapabilirsiniz :

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

veya calculated properties aracılığıyla:

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