2013-03-13 14 views
6

Czy jest możliwe utworzenie obiektu niestandardowego (PSObject) i zdefiniowanie jego właściwości wcześniej, a później w trakcie wykonywania programu, dodajemy do obiektu tablicę wartości.Tworzenie niestandardowego PSObject PowerShell 2.0

Na przykład;

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

Z góry dziękuję za wszelkie wskazówki lub porady.

+1

Nie jestem pewien, dlaczego ustawiasz $ c na pustą tablicę przed ustawieniem go do nowego obiektu PSO. Tablica została utracona przy drugim zadaniu. –

+0

Mam skrypt, który wykonuje listę kontroli dla zestawu komputerów. Dlatego chciałbym zapisać status każdej kontroli dla każdego komputera, tworząc obiekt i umieszczając status każdego komputera w tablicy. Pierwsza kontrola polega na przetestowaniu połączenia z komputerem. Chciałem dokończyć wszystkie testy komputera, a następnie zapisać status. – Rajiv

+1

Zabawny fakt: Dozwolone jest oznaczenie odpowiedzi jako poprawnej, aby pytania zostały zamknięte. :-) –

Odpowiedz

16

Nie jestem pewien, czy podążam. Czy chcesz mieć tablicę obiektów o określonych właściwościach? Ponieważ twoja próbka najpierw tworzy tablicę, którą następnie zastępujesz w jednym obiekcie. Więc straciłeś tablicę.

Można utworzyć obiekt za pomocą new-object i określić właściwości z wartościami jako zmienną w parametrze -Property. Tak:

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

Aby tablicę z nich, można użyć:

$myarray = @() 

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

Jeśli masz wiele testów, które działają pojedynczo, można uruchomić testy w funkcję, która testuje i tworzy "resultobject", a następnie otrzymasz go:

$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 za komentarz w usuniętej odpowiedzi :) –

+0

czy jest to konwencja określająca wartość właściwości dla pierwszego elementu tablicy? Mam na myśli, czy nie możemy zadeklarować struktury tablic (z nazwami kolumn), a następnie dodać element tablicy w odpowiednim czasie. Czy ustawianie elementu tablicy wraz z inicjacją PSObject jest obowiązkowe? – Rajiv

+1

Czy masz na myśli, czy musisz dodać go do tablicy podczas jej tworzenia? Ponieważ tego nie robisz. Możesz użyć '$ myobjname = new-object .....', a następnie dodać go później '$ myarray + = $ obj'. W większości przypadków znasz wartości obiektu, gdy chcesz go utworzyć, więc łatwiej jest zrobić to wszystko razem. –

2

tak, tak, wiem, że to stary post ale Don Jones zrobił coś takiego:

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

$c = New-Object PSObject -Property $props 

można uruchomić następujące zobaczyć właściwości i wartości nowego obiektu:

c$ | Get-Member 

myślę, że to, czego szukasz.

+1

To jest dokładnie to samo rozwiązanie, co starsza odpowiedź. –

Powiązane problemy