Az osztályok (típusok) felderítéséhez, a használatuk magyarázatához nagyon jól használhatjuk az Reflector programot (részletesebben a 2.3.4 Reflector fejezetben):
41 . ábra A Reflector közvetlenül megnyitja a .NET osztály magyarázatát
Látható, hogy a helyi menüben rögtön meg tudja hívni nekünk az adott osztály vagy metódus magyarázatát az MSDN weboldalról.
Természetesen a get-member cmdlettel is kilistázhatók a statikus tagjellemzők a ‑static kapcsolóval. Alább például a [system.convert] osztály ToInt32 metódusa látszik:
[19] PS C:\> [system.convert] | get-member ToInt32 -MemberType methods -stat
ic | ft -wrap
TypeName: System.Convert
Name MemberType Definition
---- ---------- ----------
ToInt32 Method static System.Int32 ToInt32(String value, Int32 fromBase
), static System.Int32 ToInt32(Object value), static Sys
tem.Int32 ToInt32(Object value, IFormatProvider provider
), static System.Int32 ToInt32(Boolean value), static Sy
stem.Int32 ToInt32(Char value), static System.Int32 ToIn
t32(SByte value), static System.Int32 ToInt32(Byte value
), static System.Int32 ToInt32(Int16 value), static Syst
em.Int32 ToInt32(UInt16 value), static System.Int32 ToIn
t32(UInt32 value), static System.Int32 ToInt32(Int32 val
ue), static System.Int32 ToInt32(Int64 value), static Sy
stem.Int32 ToInt32(UInt64 value), static System.Int32 To
Int32(Single value), static System.Int32 ToInt32(Double
value), static System.Int32 ToInt32(Decimal value), stat
ic System.Int32 ToInt32(String value), static System.Int
32 ToInt32(String value, IFormatProvider provider), stat
ic System.Int32 ToInt32(DateTime value)
Ezzel a metódussal a 2-es, 8-as és 16-os számrendszer számait lehet egésszé konvertálni:
[14] PS C:\> [system.convert]::ToInt32("F", 16)
15
[15] PS C:\> [system.convert]::ToInt32("111111", 2)
63
[16] PS C:\> [system.convert]::ToInt32(111111, 2)
63
Illetve visszafele is, például készíthetünk bináris számokat (a PowerShellben a System előtag el is hagyható az osztályok hivatkozásánál):
[17] PS C:\> [convert]::tostring(2516,2)
100111010100
Sőt! Hogy ez még szebb legyen, kiegészíthetjük az eredményt 16 számjegyre a PadLeft metódussal:
[18] PS C:\> [convert]::tostring(2516,2).padleft(16,"0")
0000100111010100
Nézzük kicsit jobban meg a Reflectorral a különböző .NET osztályokat! Keressük például meg a PowerShell osztályait, amelyeket a System.Management.Automation névtérben keresendők. Igazából nem gyakran kell ide járkálni, néhány típus belső világáról azonban gyűjthetünk hasznos információkat:
42 . ábra A ReadKeyOption felderítése
A fenti példában például meg tudjuk nézni, hogy a ReadKey metódusnak milyen opciói vannak. A ReadKey metódussal a 2.1.5.3 Lépjünk kapcsolatba a konzolablakkal ($host) fejezetben lesz részletesen szó.
Vagy a függvények paramétereinek ellenőrzését lehetővé tevő osztályokat is felderíthetjük:
43 . ábra Validálási osztályok felderítése
Ezekről részletesen a 1.6.2.9 Paraméterek, változók ellenőrzése (validálás) fejezetben lesz szó.
Sok esetben egy frissen létrehozott objektum tagjellemzőit szeretnénk felderíteni. Például egy új system.collections.arraylist típusú objektumét:
[1] PS C:\> $o = New-Object collections.arraylist
[2] PS C:\> $o | get-member
Get-Member :
No object has been specified to the get-member cmdlet.
At line:1
char:8
+ $o | gm
<<<<
+ CategoryInfo : CloseError: (:) [Get-Member],
InvalidOperationE
xception
+ FullyQualifiedErrorId :
NoObjectInGetMember,Microsoft.PowerShell.Comman
ds.GetMemberCommand
Ha ezt a csövezős módszert használjuk, akkor hibát kaptunk. Viszont, ha az InputObject paramétereként adjuk át az objektumot, akkor már megkapjuk a keresett tagjellemzőket:
[3] PS C:\> Get-Member -InputObject $o
TypeName: System.Collections.ArrayList
Name MemberType Definition
---- ---------- ----------
Add Method int Add(System.Object value)
AddRange Method System.Void AddRange(System.Collection...
BinarySearch Method int BinarySearch(int index, int count,...
Clear Method System.Void Clear()
Clone Method System.Object Clone()
Contains Method bool Contains(System.Object item)
…
Ennek oka, hogy a csővezetéken csak „valami” mehet keresztül, márpedig a példámban egy üres ArrayList az „semminek” számít, legalábbis a csővezetéken történő továbbítás szempontjából. Viszont hagyományos paraméterezéssel lekérdezhetők a tagjellemzők, mint ahogy láttuk.