PowerShell ISE na dopingu

Gdy pojawił się PowerShell w wersji trzeciej a wraz z nim druga odsłona PowerShell ISE, wydawało się, że era płatnych edytorów dobiega końca. I faktycznie, ostały się jedynie produkty firmy Sapien: jeden ze względu na swą uniwersalność (PrimalScript) a drugi, ze względu na oferowane możliwości (takie jak tworzenie GUI) – PowerShell Studio. Wielu z wcześniejszych autorów edytorów dedykowanych dla PowerShella uważało (i nadal uważa), że ISE nie jest produktem dojrzałym. Ponieważ jednak jest “wystarczająco dobry” dla większości użytkowników, nikomu nie opłaca się inwestować w produkt odrębny. Wyglądało więc na to, że jesteśmy skazani na niedoskonałe ISE. Na szczęście, ISE daje pewne możliwości rozbudowy. Skoro nie da się sprzedawać osobnego edytora, może uda się stworzyć narzędzie komercyjne, które rozbuduje edytor domyślny i darmowy? Przyznam, że widząc zainteresowanie ISE ludzi, którzy wcześniej unikali go jak ognia, miałem nadzieję, że “coś” się z tego (prędzej czy później) urodzi. Ale to, co się faktycznie urodziło, zdecydowanie przewyższyło moje oczekiwania.

Dodatek inny niż wszystkie

Przyznam, że w przeszłości próbowałem (i nadal zdarza mi się) pisywać rozszerzenia do ISE. Nie spodziewałem się jednak, że ingerencja w produkt może sięgnąć tak daleko. Dodatek ISESteroids zmienia wygląd i zachowanie ISE w sposób zasadniczy. Instalacja jest dość prosta: ISESteroids to po prostu moduł, który musimy pobrać, a następnie rozpakować w odpowiedniej lokalizacji. Uruchomimy go przy pomocy polecenia Start-Steroids. Przy pierwszym uruchomieniu zostaniemy poproszeni o zaakceptowanie umowy licencyjnej:

EULA-PowerShell-ISE-Steroids

Pierwszą rzeczą, do której zachęcam, jest włączenie paska opcji przy pomocy błękitnego “żuczka”. Warto dostosować poszczególne elementy do naszych preferencji. Przyda nam się to, gdy zaczniemy korzystać z możliwości, o które ISESteroids rozbudowuje PowerShell ISE. A jakież to możliwości?

Veni, vidi, poprawiłem…

ISESteroids to przede wszystkim dodatek rozbudowujący możliwości edytora. Otwierając swoje starsze skrypty momentalnie wyłapałem mniej lub bardziej poważne “usterki”. Samo ISE wyłapie jedynie błędy składni. ISESteroids dodatkowo zwróci nam uwagę na:

  • funkcje z nazwami niezgodnymi z zasadami
  • aliasy
  • ciągi znaków w podwójnym cudzysłowie bez zmiennych do rozwinięcia

PowerShell-ISE-Steroids-Bledy

Część można w prosty sposób poprawić (jak widać powyżej), inne wymagają interwencji z naszej strony. Dodatkowo możemy zadbać o odpowiednie wcięcia. Sami możemy zdecydować z czego utworzone będą one utworzone (spacja, tabulator) oraz o liczbie odpowiednich znaków (ISESteroids ustawia dwie spacje):

PowerShell-ISE-Steroids-Automatyczne-Poprawianie-Regulowany-Tab

ISESteroids dodatkowo znacznie ułatwia ocenę, gdzie znajdują się poszczególne bloki kodu: zwykłe ISE oznacza tylko znak początkowy i końcowy, ISE na dopingu dodaje odpowiednie tło i linie ograniczające interesujący nas blok.

Napisz, podpisz

Jedną z rzeczy, których zawsze brakowało mi w ISE była możliwość prostego podpisywania skryptów odpowiednim certyfikatem. ISESteroids znacznie to ułatwia. Nie tylko możemy wybrać w prosty sposób stosowny certyfikat:

PowerShell-ISE-Steroids-Wybor-Certyfikatu-Podpis-Cyfrowy

… ale możemy również włączyć serwer czasu (niezbędne, jeśli chcemy by nasze skrypty pozostały zaufane po wygaśnięciu certyfikatu):

PowerShell-ISE-Steroids-Podpis-Cyfrowy

To jednak nie wszystko. Ileż to razy miałem potrzebę by zmodyfikować profil. I o ile modyfikacja profilu samego ISE jest prosta, profilu dla wszystkich hostów wykonalna, to już modyfikowanie profilu dla zwykłej konsoli wymaga już nieco więcej “zabawy”. Z ISESteroids problem można uznać za niebyły:

PowerShell-ISE-Steroids-Edycja-Profili

Wreszcie: ileż to razy tworzyłem po raz kolejny skrypt i brakowało mi pewnych stałych elementów. Oczywiście ISE Snippets (dostępne pod CTRL+J) sprawę nieco ułatwiają, ale o ile prościej byłoby skorzystać ze skryptów wzorcowych? Znów, z ISESteroids nie będziemy już mieli z tym problemu:

PowerShell-ISE-Steroids-Skrypt-Z-Wzorca

I zasmażka!

W tym miejscu wspomnieć chciałbym o trzech “pionowych” dodatkach, stanowiących integralną część naszego “dopingu”. Zacznę od tego, który w moim odczuciu jest najmniej dopracowany. ISESteroids może próbować nam sugerować składnię do standardowych elementów kodu, takich jak instrukcja “if”. Wystarczy rozpocząć odpowiednią konstrukcję i wcisnąć kombinację klawiszy SHIFT+spacja:

PowerShell-ISE-Steroids-Dopelnianie-Kodu

O wiele ciekawsze rozszerzenie to aktywna pomoc. W dodatku jest to chyba najbardziej przejrzyście prezentowana pomoc dla PowerShella. Nie musimy nawet wymuszać wyświetlania pomocy, wystarczy ustawić kursor w odpowiednim miejscu:

PowerShell-ISE-Steroids-Poprawiona-Pomoc

Ostatni to przeglądarka zmiennych. Wyświetla co prawda tylko zmienne tworzone przez użytkownika (a przynajmniej mi nie udało się zmienić konfiguracji, by zmiennie wbudowane też tam odnaleźć). Ale oczywiście wszystko da się obejść. Wystarczy zdefiniować własną zmienną, która zawierać będzie zmienną wbudowaną. Przydatne szczególnie wtedy, gdy chcemy przyjrzeć się dokładniej modelowi obiektowemu ISE:

PowerShell-ISE-Steroids-Przegladarka-Zmiennych

Wreszcie: dodatek “poziomy”. I choć nie jest on opublikowany jako jeden z “oficjalnych” dodatków poziomych, to jednak oferuje bardzo przydatną przy szczególnie rozbudowanych skryptach funkcjonalność: przeglądarkę funkcji:

PowerShell-ISE-Steroids-Belka-Nawigacyjna

… oraz bardzo fajną wyszukiwarkę:

PowerShell-ISE-Steroids-Wyszukiwanie-Zaawansowane

Małe a cieszy

Co jeszcze? Drobiazgi, do których człowiek szybko się przyzwyczaja:

  • automagiczne “domykanie” konstrukcji takich jak bloki skryptu
  • możliwość łatwego zamiany kodu na blokowy komentarz
  • oznaczenie linii w której obecnie znajduje się kursor
  • możliwość rozszerzenia (CTRL+Q) lub zawężania (CTRL+SHIFT+Q) zaznaczenia uwzględniający strukturę kodu

ISE poinformuje nas, co w danym momencie mamy zaznaczone w pasku stanu:

PowerShell-ISE-Steroids-Analizowanie-Kodu-Pozycja-Kursora-Zaznaczenie

Wreszcie: jeśli zaznaczymy jakiś fragment to wciśnięcie dowolnego znaku kończącego lub zaczynającego jakąś logiczną całość (nawiasy, cudzysłowy), spowoduje otoczenie całości odpowiadającej wybranemu znakowi parą:

PowerShell-ISE-Steroids-Latwa-Edycja-Blokow-Kodu

Coś za coś

Jak zwykle, w życiu nie ma nic za darmo… Jeśli więc nie zamierzasz na edytor do PowerShella wydawać pieniędzy, ten produkt nie spełni Twoich oczekiwań. Trudno mi jednoznacznie określić, czy wszystkie oferowane ułatwienia uzasadniają taki wydatek. Jeśli jednak rozważałeś zakup produktu na podobnym poziomie, to zachęcam do rozważenie tego dodatku: nadal będzie rozwijany, w dodatku działa jako moduł PowerShella, więc nie wymaga “prawdziwej” instalacji. W przypadku pracy na serwerach informacja nie bez znaczenia, w końcu nie chcemy na nich instalować niczego, co nie jest niezbędne. W tym wypadku nic instalować nie musimy.

Aktualizacja:

Możliwości w ISESteroids jest tak wiele, że trzy z nich udało mi się pominąć. Przede wszystkim: proste przerabianie skrawków kodu, na funkcje. Mamy kod, w którym definiujemy zmienne i wykonujemy na nich operacje. Pod prawym przyciskiem dostępna jest opcja “zamień na fukcję”:

PowerShell-ISE-Steroids-Zamiana-Skrawka-Kodu-W-Funkcje

Kod jaki uzyskamy jest od razu przygotowany do definiowania zaawansowanej funkcji:

            
function Get-Zmienna            
{            
<#
  .Synopsis
     Short Description
  .DESCRIPTION
     Detailed Description
  .EXAMPLE
     Get-Zmienna
     explains how to use the command
     can be multiple lines
  .EXAMPLE
     Get-Zmienna
     another example
     can have as many examples as you like
#>            
    [CmdletBinding()]            
    param            
    (            
        [Parameter(Mandatory=$false,Position=0)]            
        [System.String]            
        $zmienna = 'Test'            
    )            
                
                
    Write-Output $zmienna            
}            
            

Zaliczam się do grupy “klamra w tej samej linii”, więc lekka kosmetyka byłaby konieczna, ale poza tym – większość mojej roboty jest już “załatwiona”. Na tym jednak nie koniec. W prosty sposób możemy też wyeksportować dowolną funkcję do modułu. Wystarczy kliknąć prawym przyciskiem na słowie “function”, wybrać odpowiednią opcję, następnie zaś wybrać moduł z listy (jeśli uprzednio dokonywaliśmy już eksportu) bądź wpisać nową nazwę. ISESteroids używa przy tym struktury: manifest modułu – plik psm1 wczytujący skrypty zawierające poszczególne funkcje – plik .ps1 o tej samej nazwie co funkcja i zawierający jej definicję. Folder z takim modułem, oraz główny plik modułu:

PowerShell-ISE-Steroids-Eksport-Do-Modulu

Wreszcie: ISESteroids zawiera kilka opcji, przydatnych przy analizowaniu i zmianie zachowania cmdletów. Z mojego punktu widzenia, bardzo przydatna jest opcja “utwórz funkcję zastępczą”. Moduł zawiera w sobie narzędzie ILSpy, dzięki któremu możemy przyjrzeć się również temu, jak wygląda kod poszczególnych cmdletów. Oczywiście, trudniej jest typowemu autorowi skryptów analizować kod na tak niskim poziomie, niż analizować kod napisany w PowerShellu. Często jednak łatwiej jest wówczas zrozumieć zachowanie poszczególnych poleceń. Wystarczy znów – prawy przycisk na nazwie cmdletu, po czym wybieram interesującą nas opcję:

PowerShell-ISE-Steroids-Tworzenie-Funkcji-Zastepczej

Więcej grzechów nie pamiętam… Puszczam oczko

~ - autor: Bartek Bielawski w dniu 23 kwietnia, 2014.

Komentarze 2 to “PowerShell ISE na dopingu”

  1. Świetna robota !!! na początku zastanawiałem się czy to kolejny „bajer z wodotryskami” .. ale widzę że życie staje się łatwiejsze 😉

  2. […] się tylko na elementach dodanych i zmienionych w wersji drugiej ISESteroids. Zachęcam do lektury posta dotyczącego wersji pierwszej, jeśli do tej pory o PowerShell ISESteroids nie słyszeliście. Dodatkowo – artykuł rozpisałem […]

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ń )

Połączenie z %s

 
%d blogerów lubi to: