Ki-mit-tud (Get-Member)

Korábban már megállapítottuk, hogy a PowerShellben minden objektum, és mint ilyenek, lekérdezhető tulajdonságok és meghívható metódusok jól meghatározott készletével rendelkeznek. Az egyes objektumok képességeinek felderítésére a Get-Member  cmdlet szolgál. Korábban, a nem létező parancsok kipróbálásakor már találkozhattunk az alábbi példával:

PS C:\> 1

1

Mi is történt itt? A beírt szám ebben az esetben nyilvánvalóan nem parancs, hanem mi is lehet? Természetesen egy integer típusú objektum. Ha ezt az objektumot odaadjuk a Get-Member cmdletnek, az megmondja, hogy az egy integer (ami egy érték-típus) és hogy milyen tulajdonságokkal és képességekkel rendelkezik (természetesen bármilyen más szám is jóJ):

PS C:\> 1 | Get-Member

 

 

   TypeName: System.Int32

 

Name        MemberType Definition

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

CompareTo   Method     int CompareTo(System.Object value), int CompareTo(...

Equals      Method     bool Equals(System.Object obj), bool Equals(int ob...

GetHashCode Method     int GetHashCode()

GetType     Method     type GetType()

GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode ICo...

ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider...

ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider pr...

ToChar      Method     char IConvertible.ToChar(System.IFormatProvider pr...

ToDateTime  Method     datetime IConvertible.ToDateTime(System.IFormatPro...

ToDecimal   Method     decimal IConvertible.ToDecimal(System.IFormatProvi...

ToDouble    Method     double IConvertible.ToDouble(System.IFormatProvide...

ToInt16     Method     int16 IConvertible.ToInt16(System.IFormatProvider ...

ToInt32     Method     int IConvertible.ToInt32(System.IFormatProvider pr...

ToInt64     Method     long IConvertible.ToInt64(System.IFormatProvider p...

ToSByte     Method     sbyte IConvertible.ToSByte(System.IFormatProvider ...

ToSingle    Method     float IConvertible.ToSingle(System.IFormatProvider...

ToString    Method     string ToString(), string ToString(string format),...

ToType      Method     System.Object IConvertible.ToType(type conversionT...

ToUInt16    Method     uint16 IConvertible.ToUInt16(System.IFormatProvide...

ToUInt32    Method     uint32 IConvertible.ToUInt32(System.IFormatProvide...

ToUInt64    Method     uint64 IConvertible.ToUInt64(System.IFormatProvide...

A megjelenő listából látható, hogy ez az objektum System.Int32 típusú, és ugyan nem rendelkezik tulajdonságokkal, de van néhány meghívható metódusa: vissza tudja adni a típusát, át tudja alakítani magát karakterlánccá, összehasonlítható egy másik számmal, stb. A listában szerepelnek az adott metódus különféle paraméterezéssel meghívható (overloaded) változatai, és az egyes változatok által visszaadott érték típusa is.

Próbáljuk ki, mit tud egy karakterlánc!

[24] PS C:\> "Helló" | Get-Member

 

 

   TypeName: System.String

 

Name             MemberType            Definition

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

Clone            Method                System.Object Clone()

CompareTo        Method                int CompareTo(System.Object val...

Contains         Method                bool Contains(string value)

PadLeft          Method                string PadLeft(int totalWidth),...

PadRight         Method                string PadRight(int totalWidth)...

Remove           Method                string Remove(int startIndex, i...

Replace          Method                string Replace(char oldChar, ch...

Split            Method                string[] Split(Params char[] se...

ToUpper          Method                string ToUpper(), string ToUppe...

Chars            ParameterizedProperty char Chars(int index) {get;}

Length           Property              System.Int32 Length {get;}

Ez a lista már jóval bővebb, csak győzzünk válogatni. Akinek esetleg feltűnt korábban, hogy a PowerShellben egyetlen karakterlánc-feldolgozásra képes utasítás sincsen, most megkaphatja a magyarázatot: nincs szükség ilyesmire, mert a .NET Framework String osztálya mindent tud, ami ebben a témában felmerülhet.

A következőkben kipróbálunk néhány egyszerű karakterlánc-műveletet.

Bővítsük a beírt karakterláncot (vagyis a „Helló” karakterláncra hívjuk meg a String osztály Insert metódusát, első paraméter a pozíció, második a beszúrandó karakterlánc):

PS C:\> "Helló".Insert(5, " világ!")

Helló világ!

Cseréljünk ki benne egy betűt egy másikra (a karaktereket idézőjelek vagy aposztrófok között adhatjuk meg):

PS C:\> "Helló".Replace('e', 'a')

Halló

Alakítsuk át a karakterláncot csupa nagybetűssé:

PS C:\> "Helló".ToUpper()

HELLÓ

Számoljuk meg a karakterlánc betűit (nem metódus, hanem tulajdonság, így nem kell zárójel):

PS C:\> "Helló".Length

5

A Get-Member lehet a segítségünkre akkor is, ha egy adott cmdlet kimenetét szeretnénk közelebbről megvizsgálni, megmondja milyen típusú objektumokból áll a kimenet, és azoknak milyen tulajdonságai, metódusai vannak. Ha a kimenet nem egyetlen objektum, hanem gyűjtemény (legtöbbször ez a helyzet), akkor abban akár több különböző típusú objektum is előfordulhat, de a Get-Member ebben az esetben sem jön zavarba; a gyűjteményben lévő valamennyi típust kilistázza, típusonként csak egy-egy eredményt jelenít meg. A mappákra kiadott Get-ChildItem például szokásosan FileInfo és DirectoryInfo objektumokat is tartalmaz, ekkor a Get-Member kimenetében mindkét típus megtalálható.

PS C:\> Get-ChildItem | Get-Member

 

 

   TypeName: System.IO.DirectoryInfo

 

Name                      MemberType     Definition

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

Create                    Method         System.Void Create(), System.V...

CreateObjRef              Method         System.Runtime.Remoting.ObjRef...

...

   TypeName: System.IO.FileInfo

 

Name                      MemberType     Definition

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

AppendText                Method         System.IO.StreamWriter AppendT...

CopyTo                    Method         System.IO.FileInfo CopyTo(Stri...

...

A .NET objektumokkal, metódusokkal, tulajdonságokkal és adattípusokkal kapcsolatos információt a .NET Framework SDK dokumentációjából kaphatunk, itt igen részletes leírást találhatunk valamennyi osztály valamennyi elemével kapcsolatban. Egyszerűbb esetben azonban nem érdemes a rettenetes mennyiségű információ közötti keresgéléssel sokkolni magunkat, némi segítség közvetlenül a PowerShellből is hozzáférhető az alábbi módszer használatával (egy karakterlánc objektumra meghívható Replace() metódus definícióját kérjük le, a kimenetben látható a visszaadott érték, és a lehetséges paraméterlisták):

[28] PS C:\> ("Helló" | Get-Member replace).definition

string Replace(char oldChar, char newChar), string Replace(string oldValue, st

ring newValue)

Ugyanez (legalábbis az eleje) persze megjelenik egy „közönséges” Get-Member hívás kimenetében is („Definition” oszlop), de ott a szűkös hely miatt a hosszabb szövegek vége általában már nem látható.

A PowerShell 2.0 után ezen metódusok definícióját sokkal egyszerűbben is elérhetjük, elég csak a metódust „meghívni” zárójelek nélkül:

PS C:\> "Helló".Replace

 

OverloadDefinitions

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

string Replace(char oldChar, char newChar)

string Replace(string oldValue, string newValue)



Word To HTML Converter