Szkoła skryptowania – lvl 5 – każdy lubi stringi
Po dłuższej przerwie czas powrócić do szkolnej wirtualnej ławy i ponownie wziąć się za naukę skryptopisarstwa. Wszak skrypty i automatyzacja zadań są solą życia każdego administratora IT, dzięki nim bowiem, każdy skryptujący człowiek z branży może w spokoju wypić kawę, pograć w 2048, albo porobić inne emocjonujące rzeczy w trakcie pracy. Wszak wiadomo, że nie da się spędzić 8h przy monitorze (co nawet jest usankcjonowanie w prawie pracy 😉 ), bo wiecie – „It’s scripted” 😉
Na ten odcinek dla odmiany przygotowałem jednak nieco żmudniejsze niż zazwyczaj zabawy ze stringami (tak, tak wiem, wiem – mi też się kojarzy).
Zanim jednak przejdziemy do sedna sprawy, mała wzmianka na temat czwartej wersji PSH – otóż mój ulubiony PowerGUI niestety nie obsługuje w pełni wszystkich możliwości najnowszej odsłony PSH, więc nie pozostało mi nic innego, jak chwilowo przerzucić się do domyślnego narzędzia – Powershell ISE.
Tym miłym akcentem przejdźmy do tych żmudnych operacji na stringach, czyli – słów cięcie-gięcie w PowerShellu. Zaczniemy jednak od najprostszych operacji (żeby nikt się nie zniechęcił). Cóż może być prostszego w operacjach tekstowych od zamiany małych liter na WIELKIE, lub od zamiany jakiegoś znaku w tekście? Poniżej krótkie ćwiczenia pozwalające opanować najprostsze manipulacje na ciągach znaków (żeby za dużo stringów nie było).
Najpierw musimy zadbać o to, aby mieć na czym się bawić, w tym celu tworzymy sobie zmienną, która będzie zawierała ciąg znaków:
$tekst1 = " Ala ma kOnto "
To ważne aby w ćwiczeniu mieć tekst ze spacjami na początku i na końcu, oraz dwa takie same znaki – jeden pisany małą literą, a drugi wielką (o tym czemu to ważne przekonasz się za chwilkę). Tak przygotowany tekst możemy sobie oczywiście wyświetlić co będzie wyglądało następująco:
$tekst1
Ala ma kOnto
Wyświetlony tekst zawiera spacje na początku jak i na końcu (chociaż jej nie widać ona tam jest 🙂 ). Możemy to prosto sprawdzić licząc ilość znaków w zmiennej, w tym celu użyjemy właściwości:
$tekst1.Length
14
Teraz warto pozbyć się tych irytujących spacji na początku i na końcu. Tu z pomocą przyjdzie nam metoda Trim:
$tekst1.Trim()
Ala ma kOnto
($tekst1.Trim()).Length
12
Empirycznie potwierdziliśmy, że operacja dwustronnego „ucinania spacji” zakończyła się pełnym sukcesem, aby niedowiarkom udowodnić poprawność tych operacji wykorzystajmy metodę Replace:
$tekst1.Replace(' ','.')
.Ala.ma.kOnto.
($tekst1.Trim()).Replace(' ','.')
Ala.ma.kOnto
Tu już bardziej namacalnie widać, że spacje zostały usunięte. Przypiszmy sobie więc tekst pozbawiony spacji do kolejnej zmiennej, a potem zamieńmy go na małe i wielkie literki:
$tekst2 = $tekst1.Trim()
$tekst2.ToLower()
ala ma konto
$tekst2.ToUpper()
ALA MA KONTO
Powyższych operacji, chyba specjalnie tłumaczyć nie trzeba ;). Przejdźmy więc do odnajdywania znaków w ciągu. Użyjemy do tego metody IndexOf:
$tekst2.IndexOf('a')
2
$tekst2.IndexOf(' ')
3
$tekst2.IndexOf('A')
0
$tekst2.IndexOf('O')
8
Dwie ważne uwagi, znak na pierwszym miejscu ma indeks zero (co chyba nikogo nie dziwi), oraz metoda IndexOf uwzględnia wielkość liter. Warto to zapamiętać (szczególnie tą drugą informację), aby w przyszłości uniknąć niemiłych niespodzianek :).
To tyle w dzisiejszym odcinku, następne oczywiście wkrótce. Więcej odcinków „Szkoły Skryptowania” znajdziecie tutaj.
mało…bardzo mało ….. czekamy na więcej / częściej
Pozdrawiam i dzięki że powstaje coś o PS w PL
Postaram się 🙂
Zgadzam się z Grzegorzem prosimy o więcej i znacznie częściej o PowerShellu. Czy jest możliwość kontynuowania tej lekcji dodając temat: wyrażeń regularnych w PS?
No, panowie dwa komentarze z pozytywny oddźwiękiem, tego się nie spodziewałem. Jak czytelnicy dobiją do 5 komentarzy zachęcających do kontynuowania/częstszego pisania i jeszcze jak wpadną propozycje tematów do opisania, to obiecuję iż dołożę wszelkich starań, aby publikować 1 odcinek w tygodniu.
A co tam zróbmy crowdfounding komentarzowy:
1. 5 komentarzy – wpis co tydzień
2. 10 komentarzy – 2 wpisy w tygodniu
3. 10 propozycji tematów hmmm… priorytetowe potraktowanie tych propozycji 😉
Komentarze muszą pochodzić od różnych userów 😉 (byle nie jakieś multi-konta), jeden czytelnik może wrzucić tyle propozycji ile chce.
Ja teraz pracuje nad tematami:
– Mierzenie czasu wykonywania skryptów
– Workflowy (wiem to nie po polsku 🙂 )
– Powershell i query w SQL
A więc nasi czytelnicy znaleźli sposób jak Cię motywować Piotr 🙂
Dobrą pracę trzeba doceniać, a tak jest w przypadku waszego Bloga. Piszecie to po prostu zrozumiałym językiem.
Bo my nie znamy trudnego języka 🙂 Jak się nauczymy, też będziemy pisać jakimś marsjańskim techno-kodem.
Tak poważnie, utrzymanie balansu pomiędzy byciem „normalnymi, nie-nadętymi ludźmi, z którymi można iść na piwo”, „amatorami, którzy nie wiedzą o czym piszą”, a techno-ekspertami piszącymi niezrozumiałym kodem jest bardzo trudne. Jeśli udaje nam się to jako tako osiągnąć, to super :))
myślę, że wystarczy cytat A. Einstain’a
„Jeżeli nie potrafisz czegoś prosto wyjaśnić – to znaczy, że niewystarczająco to rozumiesz.”
🙂
W takim razie przyłączam się do próśb o kolejne wpisy na temat Powershella 🙂
Propozycja tematu: Skrypt logowania w powershellu krok po kroku. Sprawdzanie do jakich grup należy użytkownik, mapowanie udziałów, dysków, komunikaty, obsługa błędów, logowanie czasu pracy itp.
Zanotowane
Damian, gdybyś przegapił (bo na przykład jak wszyscy moi koledzy całe dnie grasz w Vanishing of Ethan Carter: )) to w międzyczasie stworzyłem poradę o mapowaniu: http://spece.it/windows-serwer-artykuly/mapowanie-dysku-siecowego-cmd-powershell
Możesz rozwinąć trochę, co chciałbyś poczytać o obsłudze błędów i logowaniu czasu pracy?
Widać, że nie grałeś, bo to jest gra na, co najwyżej, dwa posiedzenia :P. Aczkolwiek polecam.
Proszę, jest o grupach )
http://spece.it/windows-serwer-artykuly/powershell-lista-czlonkow-grupy-domenowej-oraz-czy-uzytkownik-nalezy-grupy
Fajne, też chcę więcej 😀 A „reasons…” zajefajne 😀
Trochę „piątkowy” dziś jestem – „reasons…”?
Ten jpg 😛