Szkoła skryptowania – lvl 5 – każdy lubi stringi

szkola_programowania_ikonaPo 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” 😉
FridayFunny
Na ten odcinek dla odmiany przygotowałem jednak nieco żmudniejsze niż zazwyczaj zabawy ze stringami (tak, tak wiem, wiem – mi też się kojarzy).
getStringFromObject
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.

Piotr Berent

Piotr Berent od 2002 w pocie czoła pracujący w środowisku IT, obecnie freelancer - Inżynier Systemowy. Entuzjasta wirtualizacji, automatyzacji i rozwiązań opartych o narzędzia open-source.

Przeczytaj także...

17 komentarzy

  1. Grzegorz Kratiuk pisze:

    mało…bardzo mało ….. czekamy na więcej / częściej
    Pozdrawiam i dzięki że powstaje coś o PS w PL

  2. Marek Urbanowski pisze:

    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?

    • Piotr Berent pisze:

      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

    • Łukasz Skalikow pisze:

      A więc nasi czytelnicy znaleźli sposób jak Cię motywować Piotr 🙂

    • Marek Urbanowski pisze:

      Dobrą pracę trzeba doceniać, a tak jest w przypadku waszego Bloga. Piszecie to po prostu zrozumiałym językiem.

    • Łukasz Skalikow pisze:

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

    • Dariusz Góra pisze:

      myślę, że wystarczy cytat A. Einstain’a
      „Jeżeli nie potrafisz czegoś prosto wyjaśnić – to znaczy, że niewystarczająco to rozumiesz.”

      🙂

    • Michał Januszko pisze:

      W takim razie przyłączam się do próśb o kolejne wpisy na temat Powershella 🙂

  3. 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.

  4. CRD pisze:

    Fajne, też chcę więcej 😀 A „reasons…” zajefajne 😀

Dodaj komentarz