Típusok testre szabása PS1XML fájlok nélkül (Update-TypeData)

PowerShell 3.0-tól kezdve lehetőség van arra is, hogy az Update-TypeData  cmdlettel menet közben, ps1xml fájlok létrehozása nélkül, futásidőben módosítsunk a típusokon. Nézzünk erre is egy példát!

Én szeretem az objektumok teljes típusnevét látni, így a GetType() metódus nem az én barátom, hiszen az alaphelyzet szerint nem jeleníti meg ezt. Miután minden objektum a System.Object-ből öröklődik, így ha azt kiegészítem egy TypeFullName tulajdonsággal, ami megadja a számomra kedves információt, akkor az megoldás lehet. Ezt az Update-TypeData cmdlettel nagyon egyszerűen megtehetjük:

PS C:\> Update-TypeData -TypeName system.object -MemberType ScriptProperty -Val

ue {$this.gettype().fullname} -MemberName TypeFullName

Ezzel minden objektum azonnal rendelkezni fog ezzel a tulajdonsággal:

PS C:\> "szöveg".TypeFullName

System.String

PS C:\> (get-date).TypeFullName

System.DateTime

Óvatosan bánjunk új tulajdonságok felvételével, különösen az osztályhierarchia magasabb szintjeinél, hiszen ekkor minden alájuk tartozó objektum hozzáférésekor kiszámolódik az új tulajdonság is, ami nem kívánt teljesítménycsökkenéshez vezethet. Optimálisabb inkább metódust létrehozni, mert az csak akkor hajtódik végre, ha explicit meghívjuk. Így az az előző példa jobb lesz így:

PS C:\> Update-TypeData -TypeName system.object -MemberType ScriptMethod -Value

 {$this.gettype().fullname} -MemberName TFN

PS C:\> "blabla".TFN()

System.String

Hogy ne kelljen túl sokat gépelni a metódus neve itt TFN lett.



Word To HTML Converter