Ostatnio na spotkaniu wroc.net jeden z wykładów był o powershell, w depeszowym skrócie to dos na sterydach. Postanowiłem dowiedzieć się o nim trochę więcej. Prowadzący powiedział, że na stronie powershell.com jest dostępna darmowa książka i rzeczywiście jest. Dodatkowo warto zapoznać się z dedykowanym edytorem dla power shell, którym jest PowerGUI, pozwala na debugowanie z praca krokową, breakpointy w skrypcie, podglądanie zmiennych i wiele inncyh dobroci, które ułatwiają pracę ze skryptem. Jeszcze żeby trochę zafisiować polecam ładną oprawę graficzną zamiast zwykłej linii poleceń – console2. Można ustawić sobie aby domyślnym interpreterem był powershell i korzystać z dobrodziejstw fikuśnego GUI dla konsolki.
Mój pierwszy skrypt, nie jest programem hello world, czasem trzeba złamać tradycję. Potrzebowałem prostego czegoś, aby móc przejść po plikach w aktualnym katalogu i wykonać na nich jakąś operację. Chciałem także, aby użytkownik mógł dowolnie wracać i przechodzić do kolejnych plików. Tak oto powstał ten skrypt, który umożliwia nawigację za pomocą strzałek na klawiaturze, oraz zakończenie pracy przez wduszenie guzika z napisem ESC.
Tym razem komentarze w kodzie 🙂
Niestety nie mam niczego, co by pokolorowało kod, a sam artystą nie jestem, także dzisiaj wersja notepad.
Write-Host “Press left or right to iterate through xxx files, ESC to stop” -ForegroundColor DarkGreen
# interesuja mnie tylko pliki .xxx
# w powershell nie ma >, <, = odpowiada im -gt, -lt, -eq
for( $i=0; $i -lt (Get-ChildItem -Filter *.xxx).Count; )
{
$filename = (Get-ChildItem -Filter *.xxx)[$i]
# pomocniczy output dla uzytkownika, nazwa pliku
Write-Host $filename
# uruchomienie aplikacji z aktualnie wybranym plikiem
# w moim przypadku bl.exe jest aplikacja konsolowa, nie kradnie mi focusa
# troche gorzej jest gdy aplikacja jest okienkowa,
# sprawdzcie na przykladzie przegladarki zdjec
./bl.exe $filename
# chyba najwazniejsza czesc: oczekiwanie na wcisniecie guzika
# trick znalazlem http://technet.microsoft.com/en-us/library/ee692948.aspx
$c = $host.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”)
# chce zakonczyc tylko ESC, ciagle lewo czy ciagle prawo
# bedzie korzystac ponownie z pierwszego/ostatniego pliku
switch(($c).VirtualKeyCode)
{
37 # key left
{
$i–
if($i -lt 0 )
{
$i=0
}
}
39 # key right
{
$i++
if($i -gt (Get-ChildItem -Filter *.xxx).Count – 1 )
{
$i = (Get-ChildItem -Filter *.xxx).Count -1
}
}
27 # ESC key
{
$i = (Get-ChildItem -Filter *.xxx).Count
}
}
}
# buziaki i pozdrowienia
Write-Host jsthedeveloper pozdrawia
Właśnie zauważyłem, że istnieje także dodatek do VS, który koloruje składnie power shell. Jest to produkt chyba tego samego koleżki co stworzył PowerGui.
Podsumowując: polecam zabawę z power shellem, daje całkiem sporo możliwości, taki .net w skrypcie. Książkę, które jest dostępna także warto przeczytać, poklikać kilka przykładów, zobaczyć jak to się je i co można osiągnąć.
Rzuciłem jeszcze okiem na Wikipedię co tam w dołączonych linkach jest i proszę: pięć części filmideł o tym jak pisać skrypty. Także jak ktoś nie lub za dużo czytać, to może pooglądać.
Tyle w temacie początków.