Jak zdołałem (mam nadzieję) pokazać w kilkunastu notkach na temat PowerShella, narzędzie to pozwala na (pół)automatyczne wykonywanie wielu niekiedy skomplikowanych operacji, o ile tylko potrafimy je zakodować w postaci odpowiednich skryptów. Możemy więc ułatwić sobie życie szybkim uploadem na serwer FTP, wysyłaniem maili, a nawet (ło kurczę!) uaktualnianiem statusu na Twitterze :) Kiedyś możemy jednak chcieć takie pojedyncze rozwiązania złożyć w jakąś większą całość – na przykład w tytułową “małą własną konsolkę”.
O co chodzi? W skrócie: o coś w rodzaju własnego shella, przyjmującego ograniczony i ściśle określony zestaw poleceń, pozwalających na wykonywanie prostych czynności. Różnica względem normalnej powłoki jest taka, iż komendy te mają być w założeniu bardzo wysokopoziomowe – każda z opisywanych dotąd przeze mnie powershellowych “sztuczek” podpadałaby pod li tylko jedno polecenie, jeśli w ogóle. Najbliższym graficznym odpowiednikiem czegoś takiego jest pasek narzędzi lub skrótów do programów.
Aby nasz mały shell stał się faktem, potrzebujemy tylko kilku rzeczy, wśród których są:
Read-Host
, nad którą nie ma co się rozwodzić w jakiś specjalny sposób. Ot, po prostu daje nam w wyniku linijkę tekstu wpisaną do konsoli. Jeśli użyjemy parametru Prompt
, nasz shell może mieć ładny znak zachęty :)switch
jest tu niemal zbytkiem, zwłaszcza że w PowerShellu posiada on pożyteczny parametr -wildcard
, pozwalający na dopasowanie ciągów znaków do wzorców zawierających symbole wieloznaczne (jak np. *
lub ?
). Dzięki temu można ograniczyć konieczność wpisywania całych nazw poleceń, jeśli jednoznaczna jest już sama pierwsza litera ("t*"
zamiast "tweet"
, itp.).System.Diagonistics.Process
i jej metody Start
– czegoś w rodzaju arcyprzydatnej kiedyś funkcji Windows API o nazwie ShellExecute
. Jeśli zaś chodzi o przekazywanie parametrów, to nie zapominajmy o metodach do obsługi stringów – cała klasa System.String
jest przecież dostępna.|
) możemy sobie z takimi aplikacjami radzić. PowerShell jest zresztą dobrym narzędziem do tworzenia używalnych front-endów do tego rodzaju programów.%ERRORLEVEL%
, zawierającej kod wyjścia ostatnio uruchomionego programu. W PSh. jej odpowiednik ma bardziej opisową nazwę: $LASTEXITCODE
. Przypomnieć warto, że dla kodów wyjścia wartością oznaczającą poprawne wykonanie programu jest zero.Składając te elementy w całość, możemy utworzyć shella z wygodnym dla nas zestawem poleceń. Kto wie, może będzie on nam odpowiadał bardziej niż pełne ikonek, kolorowe paski narzędzi :)
Zainstalowałem PowerShella po przeczytaniu kilku postów na twoim blogu. Najbardziej podobał mi się skrypt do zliczania lini w projekcie. Ale czy to nie jest troche tak, że w zasadzie można równie dobrze pisać w C# oddielny program zamiast skrypt w PowerShellu?
No ale komu by się chciało odpalać IDE? ;-)
@Piotr Wach: Xion ma wiele racji z tym IDE ;) Ja dodam od siebie, że konsola to błogosławieństwo (jeśli można w niej coś zrobić [nie tak jak w ‘cmd’ :-)])
Gdybym miał kiedyś zamiar pracować w Windows to prawdopodobnie PowerShell byłby obowiązkowym oprogramowaniem ;-)