2013-03-13 11 views
6

E 'possibile creare un oggetto personalizzato (PSObject) e definire le sue proprietà in anticipo e più tardi nella esecuzione del programma, continuiamo aggiungendo matrice di valori per l'oggetto.Creare personalizzato PSObject PowerShell 2.0

Per es;

$c = @() 

$c = New-Object PSObject 
$c | Add-Member -type NoteProperty -name Name 
$c | Add-Member -type NoteProperty -name Gender 
$c | Add-Member -type NoteProperty -name Age 


$c | Add-Member -type NoteProperty -name Name -value "John" 
$c | Add-Member -type NoteProperty -name Gender -value "Male" 
$c | Add-Member -type NoteProperty -name Age -value "30" 

Grazie in anticipo per eventuali contatti o consigli.

+1

io non sono sicuro perché si imposta $ c per un array vuoto prima di impostare a un nuovo PSObject. L'array è stato perso con il secondo incarico. –

+0

Ho uno script che fa un elenco di controlli per un insieme di computer. Quindi vorrei registrare lo stato di ogni controllo per ogni computer creando un oggetto e posizionando lo stato di ogni computer in un array. Il primo controllo è di test-connessione per il computer. Volevo completare tutti i controlli per il computer e quindi registrare lo stato. – Rajiv

+1

Fatto divertente: è possibile contrassegnare una risposta come corretta in modo che le domande vengano chiuse. :-) –

risposta

16

non sono sicuro io seguo. Vuoi una matrice di oggetti con le proprietà specificate? Perché il tuo esempio crea prima un array, che poi sovrascrivi in ​​un singolo oggetto. Quindi hai perso il tuo array.

È possibile creare l'oggetto utilizzando new-object e specificare le proprietà con valori come tabella hash nel parametro -Property. Come questo:

$c = New-Object psobject -Property @{ 
    Name = "John" 
    Gender = "Male" 
    Age = 30 
} 

Per effettuare una serie di loro, è possibile utilizzare:

$myarray = @() 

$myarray += New-Object psobject -Property @{ 
    Name = "John" 
    Gender = "Male" 
    Age = 30 
} 

Se si dispone di più i test che si esegue uno per uno, è possibile eseguire i test in una funzione che mette alla prova e crea un "resultobject", quindi si raccoglie è:

$myresults = @() 

function mytests($computer) { 
    #Test connection 
    $online = Test-Connection $computer 

    #Get buildnumber 
    $build = (Get-WmiObject win32_operatingsystem -ComputerName $computer).buildnumber 

    #other tests 

    #output results 
    New-Object psobject -Property @{ 
     Online = $online 
     WinBuild = $build 
    } 
} 

$myresults += mytests -computer "mycomputername" 
+1

+1 per il commento nella mia risposta cancellata :) –

+0

è la convenzione per specificare il valore della proprietà per il primo elemento dell'array? Voglio dire, non possiamo dichiarare la struttura dell'array (con i nomi delle colonne) e quindi aggiungere l'elemento dell'array a tempo debito. È obbligatorio impostare l'elemento dell'array con l'Inizializzazione PSObject? – Rajiv

+1

Vuoi dire se devi aggiungerlo all'array quando lo crei? Perché non lo fai. Potresti usare '$ myobjname = new-object ..... 'e poi aggiungerlo in un secondo momento' $ myarray + = $ obj'. Nella maggior parte dei casi conosci i valori dell'oggetto per te quando devi crearlo, quindi è più facile fare tutto insieme. –

2

Sì, quindi so che questo è un vecchio post, ma Don Jones ha fatto qualcosa di simile:

$props = @{ 
    Name = "John" 
    Gender = "Male" 
    Age = 30 
} 

$c = New-Object PSObject -Property $props 

È possibile eseguire il seguente per vedere le proprietà ei valori del nuovo oggetto:

c$ | Get-Member 

penso che è quello che stai cercando.

+1

Questa è esattamente la stessa soluzione della risposta precedente. –

Problemi correlati