PowerShell – efektywnie(j), część 3.

W trzeciej części jeszcze troszkę popastwię się nad konsolową pracą z PowerShellem. Opiszę kilka trików, które mogą nam pomóc oszczędzić nieco czasu i w miarę szybko dojść do pożądanych rezultatów.

Komentarze

Wydawać się może, że w interaktywnej pracy komentarze są zbędne. I faktycznie, raczej nie ma sensu korzystać z nich w celach dla których zostały stworzone. Czasem jednak zdarzy się, że zaczniemy pisać jakąś komendę (np. przenosimy komputer w AD do odpowiedniego kontenera). Mamy już niemal gotową rurkę, gdy zdajemy sobie sprawę, że nie pamiętamy całej ścieżki. Do wyboru mamy:

  • [Esc], sprawdzamy, piszemy od początku
  • [Home], wstawiamy #, [Enter], sprawdzamy, strzała w górę, usuwamy #, kończymy.

I choć drugie zdanie jest dłuższe – to jednak zwykle to jednak pierwsza opcja jest bardziej czasochłonna. Zwłaszcza, że w międzyczasie może zadzwonić telefon, szef wpadnie z niezapowiedzianą wizytą, pamięć nam się zresetuje… a Get-History zwykle nie zapomina. A przynajmniej nie od razu. 😉

Drugi sposób twórczego wykorzystania komentarzy: w PowerShellu komentarz blokowy może znaleźć się dosłownie wszędzie, przetestujcie sami:

ls <# czyli dir 
#> -r <# czyli -Recurse 
#> -fi <# znaczy filtr 
#> *.ps1 -EA 0

Oczywiście, to samo mogłoby się znaleźć w jednej linii i nadal by działało. Jakie to może mieć praktyczne zastosowanie? Powiedzmy, że napisaliśmy jakiś zagmatwany filtr do Where-Object, który nie daje żadnych rezultatów… Wystarczy czasem “wyłączyć” na moment jego fragment (odpowiednio zamykając go w <# #>) i sprawdzić, która część nie daje oczekiwanego efektu. W ostateczności można wyłączyć Where-Object a całość przepuścić przez Get-Member by upewnić się, czy nie pozajączkowała nam się nazwa właściwości.

Historia

Wspominałem już o jednym z trików związanych z historią. Jest ich więcej, ale sama historia domyślnie jest dość krótka: $MaximumHistoryCount, która za długość historii odpowiada, domyślnie ma wartość 64. Zwykle zwiększam ją do wartości maksymalnej. 😉

Gdy już mamy jakąś historię istnieje kilka opcji, by z niej skorzystać. Przede wszystkim możemy użyć kombinacji # z tabulatorem. #Numer przywoła komendę o danym ID. #Ciąg Znaków przywoła wszystkie komendy, które pasują do wzorca (ciąg znaków nie musi znajdować się na początku).

Można też uruchomić polecenie bezpośrednio z historii. Invoke-History pobiera polecenie o podany –Id i wykonuje je ponownie. By jednak efektywnie z niego korzystać dobrze jest wiedzieć jakie id miało każde z wykonanych wcześniej poleceń. Bardzo w tym pomaga odpowiednio przygotowany prompt (mój typ to dzieło Jaykula, o którym wspominałem w cyklu o profilach).

ScriptBlock jako argument

Gdy to pierwszy raz zobaczyłem, najzwyczajnie w świecie powaliło mnie z nóg. Otóż jeśli jakieś polecenie potrafi pobierać informacje z rurki, to możemy “nakarmić” je scriptblokiem. Oczywiście – jeśli scriptblock to nasze możliwości właśnie stały się niemal nieograniczone. Zwykle jednak nie jest nam potrzebny 20-linijkowy skrypt, starcza lekki retusz obiektu wpadającego z innego polecenia. Jest jeden warunek: musi być to pobieranie z rurki imienne, nie na podstawie typu (oczywiście nie wadzi jeśli możliwe są oba rozwiązania). Prosty przykład:

ls *.ps1 | Rename-Item -NewName { $_.BaseName + '.psm1' } -WhatIf

I nagle wszystkie skrypty w bieżącym katalogu zmieniły(by) się w moduły. 😉 Inne zastosowania to już kwestia naszej kreatywności. Akurat ten przykład (ze zmianą nazw plików) jest moim ulubionym.

Podsumowanie

Praca w konsoli jest tym przyjemniejsza, im swobodniej się w niej poruszamy. Myślę, że warto poświęcić nieco czasu na jej wybór, dostosowanie, zapoznać się z jej możliwościami (i ograniczeniami). Później odpowiednio ją dopasować “pod siebie” przy pomocy profilu i/ lub modułów.

W kolejnych kilku częściach tego cyklu zajmę się funkcjami, skryptami, modułami… Pewnie rozwlecze się to na kilka łaaadnych artykułów, bo to temat-rzeka. Do konsoli wrócę jeszcze na koniec, gdy opiszę wędrówkę z konsoli do skryptu i z powrotem.

~ - autor: Bartek Bielawski w dniu Październik 8, 2011.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

 
%d blogerów lubi to: