Egyedi objektumok létrehozása

Bizonyos esetekben szükség lehet, hogy teljesen új típust hozzunk létre. Egyszerűbb esetben elég, ha ez nem is „igazi” új típus, hanem a [PSObject] típus egy példányának egy nekünk tetsző tulajdonságokkal kiegészített változata. Ezt a korábban látott Add-Member cmdlettel is megtehetjük, vagy a PowerShell 2.0 új lehetőségével, amikor a New-Object  cmdlet –Property paraméterének adunk át egy olyan hashtáblát, amelyben a tulajdonságnév-érték párok vannak, mint ahogy a következő példa mutatja:

$p = @{

    név = "Soós Tibor" 

    életkor = 39

    felvét = (get-date)

}

$user = New-Object -TypeName PSObject -Property $p

Nézzük, hogy mi lett ennek az eredménye:

[76] PS C:\munka> $user

 

                   életkor név                       felvét

                   ------- ---                       ------

                        39 Soós Tibor                2010. 01. 10. 23:13:07

 

 

[77] PS C:\munka> $user | gm

 

 

   TypeName: System.Management.Automation.PSCustomObject

 

Name        MemberType   Definition

----        ----------   ----------

Equals      Method       bool Equals(System.Object obj)

GetHashCode Method       int GetHashCode()

GetType     Method       type GetType()

ToString    Method       string ToString()

felvét      NoteProperty System.DateTime felvét=2010. 01. 10. 23:13:07

név         NoteProperty System.String név=Soós Tibor

életkor     NoteProperty System.Int32 életkor=39

Látható, hogy bár az általam megadott objektumtípus PSObject volt, de ezzel a paraméterezéssel a new-object PSCustomObject típussá alakította ezt, és ehhez NoteProperty típusú tagjellemzőket vett fel.

PowerShell 3.0-tól kezdődően ráadásul használhatjuk a sorrendtartó szótártípust is, így az egyedi objektumok tulajdonságai ugyanabban a sorrendben jelennek meg, ahogy felsoroltuk azokat:

PS C:\> new-object -TypeName PSObject -Property ([ordered] @{név = "Soós Tibor"

; életkor = 44; felvét = (get-date)})

 

név                                          életkor felvét

---                                          ------- ------

Soós Tibor                                        44 2014.08.30. 17:21:29

Sőt! Még egyszerűbb módszer is van ugyanerre:

PS C:\> [pscustomobject]  @{név = "Soós Tibor"; életkor = 44; felvét = (get-dat

e)}

 

név                                          életkor felvét

---                                          ------- ------

Soós Tibor                                        44 2014.10.02. 23:06:32

Sőt! Rögtön hozzárendelhetünk ehhez az egyedi objektumhoz egy egyedi típust is:

PS C:\> $o = [pscustomobject]  @{név = "Soós Tibor"; életkor = 44; felvét = (ge

t-date); PSTypeName = "MyCustomType.Person"}

PS C:\> $o.pstypenames

MyCustomType.Person

System.Management.Automation.PSCustomObject

System.Object

Azaz a PSTypeName tulajdonságnak megadott név lesz az egyedi objektumunk elsődleges típusneve, így majd ehhez rendelhetünk formázó kifejezéseket (lásd a 1.9.8 Formázás testre szabása (Get‑FormatData,  Update-FormatData) fejezetet).

A pscustomobject  új „típusgyorsítóval” három előnyhöz is jutunk: egyrészt ez alaphelyzetben „ordered”, azaz abban a sorrendben jeleníti meg a tulajdonságokat, ahogyan azokat definiáljuk, másrészt rögtön egyedi típust is definiálhatunk, harmadrészt nagyon gyors! Az egyedi objektumok létrehozásának módszerei közül ez a leggyorsabb.



Word To HTML Converter