2016-03-24 13 views
6

Se faccio questoCome si fa ad aggiungere più valori di proprietà per un oggetto personalizzato

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

Come faccio ad aggiungere ulteriori valori utente e password per $account senza sovrascrivere quello esistente?

Non riesco a compilare $account da una tabella hash. Non conosco tutti gli utenti e le password in fase di esecuzione.

+0

credo che abbiamo bisogno di vedere un esempio di ciò che sei cercando di fare Aggiungere nuove proprietà è più semplice se si costruisce la tabella hash prima di 'new-object'. '$ props = @ {User =" Jimbo "; Password = "1234"}; $ props.NewProperty = "Yeah" ' – Matt

+1

Mi sembra di contrassegnarlo come un duplice: http://stackoverflow.com/questions/17353797/powershell-how-to-initialize-array-of-custom-objects – Matt

risposta

3

Se si desidera utilizzare $account per memorizzare utente + credenziali pwd, si dovrebbe dichiararla come array e aggiungere elementi quando si vuole:

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

uscita di $account:

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

Fantastic. Grazie. La contrassegnerò come risposta quando scade il timeout. – ATtheincredibleaf

+2

@ATtheincredibleaf La tua domanda riguardava l'aggiunta di valori di proprietà? Questa risposta mostra come costruire un array di oggetti – Matt

+0

Vorrei costruire questo in un ciclo ed evitare il '+ ='. Sei limitato a PowerShell 2.0? – Matt

9

Il Il parametro -Property di New-Object accetta una tabella hash come argomento. È possibile aggiungere le proprietà in un ordine particolare se si rende ordinato l'hashtable. Se è necessario ampliare l'elenco delle proprietà in fase di creazione basta aggiungere più voci alla tabella hash:

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

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

Se avete bisogno di aggiungere più proprietà dopo è stato creato l'oggetto, è possibile farlo tramite il Add-Member cmdlet :

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

o tramite calculated properties:

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