Powershell wprowadzenie

Szybki kurs Powershella. Część materiału pochodzi z referatu Piotra Ablewskiego.

PowerShell ma strukturę składni czasownik-reczownik:

Argumenty zawsze zaczynają się od znaku łącznika (minusa). Argumenty oddzielone są przecinkiem np:

Argumenty uruchomieniowe skryptu, które podane zostały w linii komend można przeglądać dzięki zmiennej $args. $args jest tablicą, w której znajdują się parametry. Tablica ta indeksowana jest od 0. Aby dostać się bezpośrednio do ostatniego elementu tablicy, można wykorzystać indeks -1.

Wywołując skrypt:

Do parametrów dostać można się w następujący sposób:
- $args[0] – pierwszy
- $args[1] – drugi
- $args[2] – trzeci
- $args[-1] – trzeci

Trzy typy komend możliwych do uruchomienia:
– natywne
np. ifconfig
– aliasy
np. cls, ls
– skrypty
– cmdlet (commandlety)

Składnia pozycyjna
– parametry muszą być umieszczane we właściwej kolejności.

Możliwa zwięzła forma komend. Skrypty lepiej jednak pisać w pelnej
długiej składni ze względu na łatwiejsze debugowanie takich skyptów.
np.

 

Wyświetlenie listy dostępnych aliasów

np.

 

Pomoc

np.

Aby zobaczyć przykłady użycia danej komendy należy wykorzystać opcję :

Dodatkowo będziemy mogli wtedy przejrzeć opis komendy.
Aby uzyskać szczegółowy opis polecenia, zilustrowany przykładami pomocna będzie opcja –Detailed:

Aby przejrzeć pełną dokumentację techniczną zawierającą opis komendy, parametry z opisami i przykłady zastosowania, należy użyć opcji –Full:

Jeżeli żadna z zaprezentowanych powyżej opcji nie rozwiała naszych wątpliwości i nie przekazała informacji, której poszukiwaliśmy, zawsze możemy poszukać informacji na temat danego cmdlet’a w
Internecie, prosto z poziomu PowerShell, wykorzystując opcję –Online:

 

GET-COMMAND
Kolejną ważną dla początkujących komendą będzie cmdlet Get-Command. Pozwoli ona na znalezienie cmdlet’a, którego składni dokładnie nie pamiętamy.
Jednak w pierwszej kolejności skupmy się na samej komendzie Get-Command. Wywołanie:

Powoduje, że wyświetlona zostaje lista wszystkich cmdlet’ów zainstalowanych na komputerze oraz ich aliasów, funkcji, filtrów, skryptów i dostępnych aplikacji. Polecenie to daje wyniki dotyczące wszystkich sesji. Jeżeli chcemy ograniczyć się do bieżącej sesji przydatny okaże się parametr -ListImported:

Jeśli wykonamy polecenie:

Otrzymamy listę wszystkich typów komend, wliczając w to programy, które nie są integralną częścią PowerShell’a, a zawarte są w katalogach zapisanych w zmiennej systemowej $PATH. Można zadać sobie pytanie: jaka jest różnica pomiędzy poleceniami Get-Help a Get-Command. W pierwszy przypadku, wynik jest brany z manuala do danego polecenia, a w przypadku drugim – prosto z kodu komendy. Jakie inne parametry mogą być jeszcze przydatne? Oto ich lista z wyjaśnieniem użycia. Oczywiście dokładny opis wszystkich opcji można uzyskać korzystając z pomocy PowerShell’a, a więc wywołując
cmdlet’a Get-Help.

Parametry charakterystyczne dla cmdlet’a Get-Command:

Zwraca listę wszystkich komend, włączając w to komendy tego samego typu, które mają te same nazwy (są w innych przestrzeniach nazw).

Zwaca listę wszystkich komend, które można wywołać z podanym parametrem

Zwraca tylko te komendy, które należą do danego typu komend. Dostępne typy to:
? Alias – alias do polecenia w PowerShell’u
? All – komendy wszystkich typów
? Applications – pliki, które nie są częścią PowerShell’a, ale zawarte są w ścieżkach zadeklarowanych w zmiennej systemowej $PATH (wliczając w to pliki tekstowe, wykonywalne jak i biblioteki DLL)
? Cmdlet – komendy będące tylko cmdlet’ami (czyli integralną częścią PowerShell’a)
? ExternalScript – pliki zawarte w folderach zadeklarowanych w zmiennej $PATH zawierające skrypty PowerShell’a (czyli pliki o rozszerzeniu *.ps1)
? Filter – wszystkie filtry PowerShell’a
? Function – wszystkie funkcje PowerShell’a
? Script – wszystkie bloki skryptów (za wyjątkiem oddzielnych plików, które zwróci typ ExternalScript
? Workflow – wszystkie workflow’y dostępne w PowerShell’u

 

GET-COMMAND –MODULE NAZWA
Wyświetla informacje o komendach, które pochodzą z określonego modułu lub dodatku.

 

GET-COMMAND –NAME WZÓR
Wyświetla tylko te komendy, które zawierają w sobie konkretną nazwę lub wzór nazwy, w którym można stosować wieloznaczniki. Aby dodatkowo uzyskać listę wszystkich poleceń o podanej nazwie zaleca się stosowanie opcji –All z opcja –Name

 

GET-COMMAND –NOUN WZÓR
Podaje wszystkie komendy, których nazwy zawierają podany rzeczownik w swojej nazwie. Jako
argument można podać klika słów, również stosowanie masek jest dozwolone.

 

GET-COMMAND -SYNTAX
Podaje tylko określone informacje na temat poszukiwanej komendy:
? Dla aliasów – podaje nazwę komendy, którą uruchamia alias
? Dla cmdlet’ów – podaje składnię polecenia
? Dla funkcji i filtrów – wyświetla ich definicję
? Dla skryptów i aplikacji – wyświetla ścieżkę i nazwę pliku, który zostanie uruchomiony

 

GET-COMMAND -TOTALCOUNT
Zwraca określoną ilość komend. Parametr ten jest wykorzystywany, aby ograniczyć ilość zwróconych komend:

 

GET-COMMAND -VERB
Zwraca wszelkie możliwe parametry, których nazwa zawiera podany czasownik. Można stosować kilka czasowników jak również maski w podawanych słowach.

 

GET-COMMAND -LISTIMPORTED
Podaje tylko te komendy, które dostępne w bieżącej sesji. Parametr ten jest przydatny, gdyż od PowerShell 3.0 domyślnie zwracane są wszystkie dostępne komendy, nie tylko te z bieżącej sesji.

 

GET-COMMAND -PARAMETERNAME
Zwraca te komendy dostępne w danej sesji, które posiadają podane parametry. Można podawać
nazwy parametrów lub ich aliasy. Obsługiwane są również maski w słowach.

 

GET-COMMAND –PARAMETERNAMETYPE
Jako wynik otrzymujemy listę komend dostępnych w aktualnej sesji, które mogą zostać wywołane z parametrami określonego typu. Można stosować całe lub częściowe nazwy typów. Dozwolone jest również stosowanie masek.

Oczywiście polecenie Get-Command oferuje jeszcze inne możliwe parametry, z którymi można je wywołać, takie jak: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer czy –OutVariable.
Jednak są one na tyle rzadko stosowane, że nie ma potrzeby wspominać o nich w kursie podstaw PowerShell’a. Jeśli jednak ktoś jest zainteresowany działaniem wymienionych parametrów, może zawsze skorzystać z pomocy PowerShell’a.

GET-MEMBER
Wiedząc już jak znaleźć polecenie wśród gąszczu funkcjonalności zdarza się, że nie do końca wiemy jakie własności czy metody posiada obiekt na którym działamy. Z pomocą przyjdzie nam na tutaj polecenie Get-Member. Służy ono, jak z resztą wskazuje nazwa, to podpowiedzenia użytkownikowi jakie elementy składowe posiada obiekt wykorzystywanej klasy.

 

Wyświetlanie procesów

np. get-process -name mail

# czyszczenie ekranu

 

Pipeliny
np. odnalezienie id procesu Mail i zatrzymanie go

 

Zmienne
– pozwalają na manipulacje danym gdy zachodzi taka potrzeba
– zmienne muszą zaczynać sie od znaku $
– mogą zawierać wynik komendy np. $variable=get-process -name Mail

Wyświetlenie wszystich komend związanych ze zmiennymi

np.

np.

 

Operacje na plikach.
odczyt pliku

zapis do pliku

 

UMOŻLIWIENIE WYKONYWANIA SKRYPTÓW

- Restricted – uniemożliwia uruchamianie skryptów
- All Signed – umożliwia uruchomienie skryptów, które podpisane są przez wiarygodnego twórcę
- Remote Signed – skrypty lokalne mogą być uruchamiane, skrypty ściągnięte muszą być cyfrowo podpisane
- Unrestructed – można uruchamiać wszelkie skrypty, nawet te niepodpisane cyfrowo i od niepewnych wydawców.

Znakiem komentarza w PowerShell’u jest znak #.

 

ZNAKI SPECJALNE FORMATOWANIA LINII
Bardzo często zdarza się, że potrzeba złamać linię lub złączyć klika instrukcji w jednej, aby kod był czytelny.
Do oddzielenia następujących po sobie instrukcji w PowerShell’u służy znak ;
Oto przykład jego wykorzystania:

Istnieje również możliwość złamania linii z wykorzystaniem znaku .

Podobne działanie ma znak |, który oddziela poszczególne polecenia, przekazując zarówno strumień obiektu z jednego cmdlet’a do drugiego:

Które wylistuje bieżący katalog i posortuje wyniki zgodnie z ich rozmiarem.

 

WYŚWIETLENIE DANYCH NA KONSOLI
Podstawowym sposobem na interakcję z użytkownikiem jest pobieranie i wyświetlanie danych w konsoli. Aby wyświetlić dane wykorzystamy cdlet’a Write-Host. Znany wszystkim programistom „Hello World!” w przypadku PowerShell’a wygląda następująco:

Najprostszym sposobem na zmianę wizualną stylu wyświetlania komunikatów jest wykorzystanie trybu ostrzegawczego konsoli:

Aby wykorzystać dowolny kolor z dostępnej palety, można zastosować argument –foregroundcolor, który dla cmdlet’a Write-Host zmieni kolor pierwszoplanowy oraz cmdlet’a –backgroundcolor, który zmieni kolor drugoplanowy. Przykładowe użycie wygląda następująco:

Jak łatwo zauważyć, wpisywany tekst jest łamany dopiero po zakończeniu polecenia. Aby złamać go wcześniej wystarczy zawrzeć w miejscu podziału ciąg: n, tak jak w poniższym przykładzie:

 

POBIERANIE DANYCH Z KONSOLI
Równie banalne jest pobieranie danych z konsoli. Służy ku temu polecenie Read-Host (po raz kolejny zwracam uwagę na bardzo logiczną nomenklaturę stosowaną przy nazewnictwie cmdlet’ów).

Polecenie przedstawione powyżej spowoduje wyświetlenie na konsoli monitu o podanie danych i wczytanie danych do zmiennej $zmienna.

PORÓWNYWANIE ZMIENNYCH
Jeśli korzystamy ze zmiennych, będziemy je chcieli zapewne porównać. Oczywiście część z cmdlet’ów posiada już zaimplementowaną obsługę operatorów porównania (np. Where-Object).
W PowerShell’u można wykorzystać następujące operatory porównania:
-lt – mniejsze niż
-le – mniejsze lub równe
-gt – większe niż
-ge – większe bądź równe
-eq – równe
-ne – nierówne
-like – podobne do (wykorzystuje symbole wieloznaczne i maski)
-notlike – niepodobne do (również wykorzystuje symbole wieloznaczne i maski)

Dodatkowo operatory mogą rozróżniać wielkie i małe litery. Aby włączyć tą funkcjonalność należy przed symbolem operatora porównania użyć litery c. Np. operator –ceg to operator równości z uwzględnieniem wielkości liter.

CZYTANIE DANYCH Z PLIKÓW
PoweShell umożliwia również czytanie danych z pliku, przy wykorzystaniu polecenia Get-Content. Jego składnia wygląda następująco:

Każda z linii w pliku taktowana jest jako oddzielna zmienna, która znajduje się w tablicy. Dostać można się do niej poprzez numer wiersza w pliku. Zasady numeracji są takie same jak w przypadku argumentów wejściowych skryptu – $wczytany_plik[0] to linia pierwsza, $wczytany_pli[10] to linia
jedenasta, a $wczytany_plik[-1] to ostania linia w pliku.
Aby określić ilość linii, słów lub znaków w pliku, należy zastosować polecenie:

 

ZAPISYWANIE DO PLIKU
Skoro umiemy już otwierać pliki, warto zapoznać się ze sposobami na zapisanie danych do pliku. Oczywiście dostępne są wcześniej wspomniane strumienie plikowe znane jeszcze z czasów DOSa, czyli >, który nadpisuje plik i >>, który dopisuje do pliku. Jednak stworzony został cmdlet, który umożliwia zapis do pliku. Jest to Out-File. Świetnym przykładem zapisu do pliku jest wylistowanie procesów uruchomionych na maszynie, tak więc w PowerShell’u można zrealizować to na dwa sposoby: Pierwszy, znany już z czasów DOS’a:

Celem utworzenia nowego pliku, lub

Celem dopisania treści do istniejącego już pliku. Drugim sposobem jest zastosowanie cmdlet’a Out-File:

Celem nadpisania pliku, lub

Celem dopisania danych do istniejącego pliku. Oczywiście dane można zapisać w bardziej przyjaznym do obróbki formacie CSV, stosując polecenie
Export-CSV:

 

DRUKOWANIE DANYCH
Dane w PowerShell’u można przedstawiać nie tylko na standardowym wyjściu czy w pliku, ale również można wysłać je na domyślną drukarkę poprzez polecenie Out-Printer:

Spowoduje to wydrukowanie wszystkich procesów uruchomionych na naszej maszynie na domyślnej drukarce.

PĘTLE I INSTRUKCJE WARUNKOWE
PowerShell, jako że jest pełnoprawnym językiem programowania, posiada szereg pętli i instrukcji, które można wykorzystać przy tworzeniu kodu. Postaram się omówić ich strukturę w sposób na tyle
jasny, ze nie będzie problemem ich wykorzystanie w trakcie pisania skryptów.

IF … ELSEIF .. ELSE
Podstawową instrukcją warunkową wykrzystywana przez PowerShell jest poczciwy IF. Jego konstrukcja powinna być znana wszystkim programistom, w takiej formie jak w tym przypadku – programistom tworzącym skrypty pod powłoki systemu Linux/UNIX.

Opcje elseif i else są oczywiście opcjonalne i najprostsza konstrukcja zakłada wykorzystanie samej
opcji if.

SWITCH
Dzięki instrukcji Switch można w prosty sposób uniknąć tworzenia wielu instrukcji warunkowych if po sobie.

 

FOR
Jeśli pętla ma wykonać się dla określonej wartości zmiennych, najlepszym wyborem będzie FOR

 

FOREACH
Jeśli będziemy operować na większym zbiorze danych, jak na przykład na obiekcie, bardzo pomocna okaże się pętle Foreach:

 

PĘTLA WHILE – STEROWANA Z GÓRY
Jeśli zależy nam na wykonywaniu się kodu do osiągnięcia pewnego warunku, można wykorzystać
pętlę While. Wykonuje się ona dopóty, dopóki warunek jest spełniony:

 

PĘTLA DO WHILE – STEROWANA Z DOŁU
Jeśli instrukcje mają zostać najpierw wykonane, a później ma zostać sprawdzony warunek (czyli
wykonanie instrukcji nastąpi na pewno minimum raz), możemy wykorzystać pętlę Do While:

 

DO … UNTIL
Ciekawostką jest również fakt, że do łask wróciła pętla until sterowana z dołu, a więc instrukcja wykona się przynajmniej raz i będzie wykonywana dopóty, dopóki warunek nie będzie spełniony:

 

Leave a Reply

Your email address will not be published. Required fields are marked *