.NET w parze z PowerShellem

Jaki jest najszybszy sposób, aby sprawdzić, jak zbudowana jest dana klasa z BCL? Jakie ma metody, właściwości? Niektórzy z pewnością poproszą o pomoc wujka Google, który z chęcią przerzuci zainteresowanych na witrynę MSDN Library. Miejsce to oczywiście godne polecenia każdemu, bo jak mało która dokumentacja jest naprawdę szczegółowa. Ale co w sytuacji, gdy nie mamy dostępu do internetu? Najprostszym sposobem byłoby stworzenie na szybko jakiejś aplikacji, wpisanie nazwy klasy i IntelliSense powinien podpowiedzieć nam całą resztę. Sprytnie, ale trochę ciężko. Zaznajomieni ze środowiskiem Visual Studio wiedzą, że istnieje coś takiego, jak Object Browser dostępny z menu Tools. Narzędzie całkiem przydatne, a dodatkowo informuje, w jakim zestawie dostępna jest dana klasa. Ostatnim sposobem, na którym chciałbym się dziś skoncentrować, jest PowerShell. Jak prześwietlać klasy i jak ich używać w skryptach –  o tym w dalszej części. Spokojnie, znajomość super powłoki nie jest wymagana.

Aby zdobyć informację o danym typie, wystarczy wpisać jego pełną nazwę, tj. razem z namespacesem w nawiasach kwadratowych:

PS C:UsersWojtek [System.IO.DriveType]

IsPublic IsSerial Name      BaseType
-------- -------- ----      --------
True     True     DriveType System.Enum
 

Jak widać, nie dostaliśmy zbyt wielu cennych informacji . Do dyspozycji na szczęście mamy wszystkie metody, jakie udostępnia klasa System.Type. Np. GetConstructors(), GetMembers(), GetFileds() itp. W podanych zastosowaniach będę używał komendy Format-Table, która powoduje wyświetlenie tylko tych właściwości obiektów, jakie chcę zobaczyć.

PS C:UsersWojtek> [System.IO.DriveType].GetFields() | Format-Table Name

Name
----
value__
Unknown
NoRootDirectory
Removable
Fixed
Network
CDRom
Ram
 

Łatwo i szybko dostaliśmy wyliczenia danej enumeracji. Jeśli chcemy zobaczyć, w jaki sposób działa dana funkcja, możemy stworzyć obiekt dowolnej klasy, a następnie uruchamiać jego metody. Zobaczcie to na przykładzie StringBuildera:

PS C:UsersWojtek> $a = New-Object System.Text.StringBuilder
PS C:UsersWojtek> $a.Append("hej")

Capacity MaxCapacity Length
-------- ----------- ------
      16  2147483647      3

PS C:UsersWojtek> $a.Append(" ho")

Capacity MaxCapacity Length
-------- ----------- ------
      16  2147483647      6

PS C:UsersWojtek> $a.ToString()
hej ho
 

Po każdej zmianie obiektu wyświetlane są jego właściwości i jak na dłoni widać, co się zmieniło. Bardzo przydatna rzecz podczas poznawania nowych klas.

Możliwości PowerShella są naprawdę ogromne, sam z pewnością nie jestem świadomy istnienia połowy z nich. Niecierpliwych odsyłam do angielskiego bloga w którym znajdziecie mnóstwo przykładów wykorzystania PowerShella na platformie .NET, a ciekawskich zachęcam do eksperymentowania. Polecam PowerGUI jako podstawowy edytor PSa.

Promuj

  • Pingback: .NET w parze z PowerShellem - develway.pl()

  • Śledząc ostatnie wersje oprogramowania od MS mam wrażenie (potwierdzone praktyką) że wiele zaawansowanych opcji trafia do PowerShella, a znika z okienek do wyklinania. Także można przypuszczać że w najbliższym czasie czeka nas era power shella… ;)

  • A ciekawe co na to linuchy? Mają pewnie gula (jeśli są świadomi) bo ich śmieszny bash nie ma dostępu do czegoś takiego jak .NET i może wykonywać tylko tyle co zwykły skrypt + programy konsolowe. Sam jak się bawiłem i nie chciało mi się sprawdzać każdego ‚cmdlets’ czy akurat mi się przyda więc leciałem po klasach .NET np System.IO :)