Profile – część trzecia.

W tej części zamierzam poznęcać się nieco nad profilem dla ‘tradycyjnej’ konsoli. PowerShell.exe dziedziczy wszystkie ograniczenia cmd.exe. Nawet jego kolorystyka jest w zasadzie mocno naciąganym szachrajstwem. By się o tym przekonać wystarczy sprawdzić jaką wartość mają kolory. Czy Waszym zdaniem piszecie na żółto po fioletowym tle? Nie? To sprawdźcie wartość Back/ Foreround color. Wartości obu parametrów domyślnie ustawione są pewnie tak jak u mnie:

PowerShell_exe Nie regulujcie odbiorników. Wiem, u Was wygląda to zdecydowanie inaczej. Przyczyna? Domyślny skrót do PowerShell.exe ma pozmienianie wartość RGB kolorów podstawowych, więc DarkMagenta może i jest nawet Dark, ale na pewno daleko mu do Magenta. O zażółceniu DarkYellow nawet nie wspominam… 😉

To powoduje, że staram się unikać definiowania kolorystyki konsoli. Skupiam się na jej rozmiarze okna, bufora i funkcji prompt. Zacznę od ostatniego, jako że nie jestem autorem tak zacnej implementacji. Generalnie moja funkcja została zadoptowana ze skryptu autorstwa MVP Joela Benneta (@Jaykul): http://poshcode.org/2095

Korzyści? Ścieżka (wraz z informację o bieżącej przestrzeni nazw) jest wyrzucona do tytułu okna. Widzę, na jakim koncie (i z jakimi uprawnieniami) pracuję. A dzięki temu, że wiem jakie ‘id’ ma bieżąca komenda, mogę bez trudu skorzystać później z cmdletu Invoke-History (alias: r) i ponowić jej wykonanie. Dodatkowo taki sposób wyświetlania ułatwia kopiowanie zawartości do dowolnego edytora skryptów. Prompt jest oznaczony jako komentarz blokowy, nie wpływa na działanie komend wpisanych za nim. 🙂

Pozostaje kwestia gabarytów. Jak wszyscy wiemy skalowanie okna cmd nie jest bardzo przyjemne. W powershell.exe sprawa jest nieco prostsza: zmienna $host zawiera pewne elementy, które umożliwią nam w prosty sposób okno ‘rozdymać’ do rozmiarów maksymalnych. Zwrócę tylko uwagę, że całość wrzuciłem w blok try {} catch. O tym dlaczego tak zrobiłem – nieco niżej. Kod, który obecnie wykorzystuję:

try {            
 $host.UI.RawUI.CursorSize = 100            
 $MySize = $Host.UI.RawUI.MaxPhysicalWindowSize            
 $MySize.Height -= 2 # We need titlebar after all             
 $MySize.Width -= 4            
 $MyBuffer = $MySize            
 $MyBuffer.Height = 5000 # Set to any value you need I like it looong.              
 $Host.UI.RawUI.BufferSize = $MyBuffer            
 $Host.UI.RawUI.WindowSize = $MySize            
} catch {            
 # Since it's PowerGUI, let us set some Console settings...            
 $Host.UI.RawUI.ForegroundColor = 'White'            
 $Host.UI.RawUi.BackgroundColor = 'black'            
}            

W ten sposób okno powinno nam urosnąć, a bufor wydłużyc się znacznie (dzięki temu rezultaty poszczególnych komend jeszcze długo będzie można podejrzeć). Dlaczego przewiduję błędy? Otóż niektóre narzędzia firm trzecich (PowerGUI, PowerShellPlus) mogą uruchamiać nasze profile, w tym profil powershell.exe. Naturalnie, próba zmiany rozmiaru okna w taki sposób nie zadziała w tych aplikacjach. A po co się denerwować błędami? 😉

Co jeszcze w moim profilu do powershell.exe można znaleźć? Niewiele. Z modułów ładuję w tym profilu przede wszystkim PowerTab, który zdecydowanie ułatwia pracę z tabulatorem. Oprócz tego (zakładając ładowanie profilu przez PowerGUI) definiuję kilka elementów przydatnych w zagnieżdżonej w tej aplikacji konsoli (ale to już nieco inna historia…). Do tego kilka innych modułów, których działanie upraszcza pracę z PowerShellem. Część z nich używam zarówno w PowerShell.exe jak i w ISE. Czemu więc nie przeniosłem ich do profilu dzielonego przez wszystkie hosty? O tym w następnej części cyklu, gdy zajmę się cudami jakie można wyczyniać w ISE.

~ - autor: Bartek Bielawski w dniu 18 marca, 2011.

Komentarze 2 to “Profile – część trzecia.”

  1. […] Część 3: PowerShell.exe […]

  2. PowerTab – fajny moduł, przyda się … dzięki

    z każdym kolejnym artykułem robi się coraz ciekawiej 🙂

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: