Zastosowanie PowerShell:
zarządzanie systemem plików - konsola pozwala nam na wykonanie takich zadań jak: ustawianie, modyfikowanie, tworzenie czy usuwanie uprawnień do plików jak i katalogów,
zarządzanie rejestrem - dodawanie, usuwanie oraz modyfikowanie parametrów dostępnych w rejestrze systemu Windows,
zarządzanie procesami - zatrzymywanie oraz uruchamianie procesów a także monitorowanie ich stanu,
zarządzanie usługami - uruchamianie, restartowanie, zatrzymywanie usług a także sprawdzanie ich stanu,
W przypadku systemów serwerowych PowerShell pozwala na zarządzanie zainstalowanymi rolami czy funkcjami oznacza to, że przy pomocy powłoki skonfigurujemy takie usługi jak Active Directory, IIS czy usługi terminalowe.
Dodatkowo PowerShell:
- umożliwia współpracę z standardowymi i znanymi już poleceniami (np. tymi wykorzystywanymi w linii poleceń systemu Windows - tzw. command line) i aplikacjami Windows,
- obsługuje obiekty,
- do działania wykorzystuje nowy typ poleceń tzw. cmdlety. Polecenia te bazują na składni opierającej się o czasownik-rzeczownik i są znacznie bardziej intuicyjne niż standardowe instrukcje wykorzystywane do tej pory,
- celem automatyzacji zadań umożliwia pisanie skryptów,
- łączy ze sobą różne technologie - XML, WMI, Active Directory, .NET.
Historia wersji Windows PowerShell:
PowerShell 1.0 został wydany w listopadzie 2006 roku i objął takie systemy jak: Windows XP z dodatkiem SP2 , Windows Server 2003 i Windows Vista. Jako opcjonalny składnik systemu trafił również do systemu Windows Server 2008. Dzięki upowszechnieniu narzędzia została wprowadzona ujednolicona metodologia pracy.
PowerShell 2.0 został zintegrowany z systemami: Windows 7 i Windows Server 2008 R2 a także możliwość korzystania z tej wersji narzędzia została poszerzona o takie systemy jak: Windows XP z dodatkiem Service Pack 3, Windows Server 2003 z dodatkiem Service Pack 2 oraz Windows Vista z dodatkiem Service Pack 1. Z najważniejszych usprawnień jako dodano to: wsparcie dla pracy zdalnej; nowe graficzne narzędzie Windows PowerShell Integrated Scripting Environment (ISE); zmiany w języku skryptowym oraz szereg nowych poleceń cmdlet.
PowerShell 3.0 został zintegrowany z systemami: Windows 8 oraz Windows Server 2012 oraz możliwość uruchomienia narzędzia w systemach: Windows 7 z dodatkiem Service Pack 1, Windows Server 2008 z dodatkiem Service Pack 1 oraz Windows Server 2008 R2 z dodatkiem Service Pack 1. Nowości jakie wprowadzono to przede wszystkim: uproszczenie składni, planowanie zadań, wsparcie dla WinRM (praca zdalna) oraz wprowadzono nowe komendy odpowiedzialne za: zarządzanie dyskami, drukarkami, obsługa firewalla oraz połączeń sieciowych.
PowerShell 4.0 domyślnie swym działaniem objął systemy: Windows 8.1 oraz Windows Server 2012 R2. Narzędzie można również uruchomić na systemach: Windows 7 SP1, Windows Server 2008 R2 z dodatkiem SP1 oraz Windows Server 2012. Główne zmiany to dalsze usprawnienie modelu zarządzania czy możliwość wykorzystania PS do zarządzania maszynami wirtualnymi opartymi o Hyper-V.
Ostatnią wersją PowerShella jest wersja 5.0 wydana w dniu 24 lutego 2016 roku, która doczekała się aktualizacji do wersji 5.1 wraz z aktualizacją Windows 10 Anniversary.
Jakich narzędzi możemy użyć by zgłębić tajniki tego języka?
Pierwszym jest oczywiście sama konsola PS, która umożliwia nam zarządzanie systemem wykorzystując do tego komendy linii poleceń. Konsola ta działa całkowicie w trybie tekstowym.
Lecz jest to nie jedyne narzędzie, gdyż możemy do nauki PS wykorzystać również edytor graficzny czyli Windows PowerShell ISE.
Podstawowa funkcjonalność obu konsol jest taka sama co oznacza, że bez względu na to, które z narzędzi wybierzemy wykonamy dzięki nim te same operacje, gdyż udostępniają one te same polecenia oraz wykorzystują te same moduły. Zaletą korzystania z konsoli Windows PowerShell ISE jest większa interakcja z użytkownikiem.
Konsola Windows PowerShell ISE zapewnia nam takie funkcje jak:
- graficzny interfejs użytkownika (GUI),
- wstawianie kodu,
- zastosowanie kolorów oraz podświetleń podczas budowy poleceń,
- podświetlanie i kolorowanie składni języków PowerShell i XML,
- wskaźniki błędów,
- obsługa kart, na których możemy niezależnie pracować nad różnymi zadaniami,
- obsługa Unicode,
- własne czcionki, możliwość doboru kolorów oraz funkcja zoom,
- obsługa debugowania.
Jeśli Czytelniku posiadasz 64-bitową wersję systemu do wykorzystania będziesz miał oprócz wersji 64-bitowej również wersję 32-bitową (konsola PS jak i konsola ISE).
Po tym krótkim wstępie przejdźmy zatem do uruchomienia PowerShella i przyjrzyjmy się podstawowym opcją umożliwiającym konfiguracje okna.
Aby uruchomić powłokę PowerShell należy odnaleźć odpowiedni skrót w menu Start bądź wykorzystać do tego okno Uruchamianie (skrót: Windows+R).
Po wydaniu polecenia zostanie uruchomione okno narzędzia PowerShell. Okno te jest bardzo podobne do znanego już nam okna linii wiersza poleceń (command line). Monit PS <ścieżka_dostępu> wraz z migającym kursorem informuje nas, że powłoka jest gotowa do pracy.
Na wstępie warto zadbać o aktualizację posiadanej wersji PS.
Aby sprawdzić wersję zainstalowanego środowiska PS wydaj polecenie: Get-Host W sekcji Version odnajdziesz informacje o posiadanej wersji.
W zależności od posiadanej wersji systemu, zainstaluj najbardziej aktualną wersję środowiska PS. Poniżej odnośniki pozwalające na pobranie narzędzia:
PowerShell 3.0 - https://www.microsoft.com/en-us/download/details.aspx?id=34595,
PowerShell 4.0 - https://www.microsoft.com/en-us/download/details.aspx?id=40855,
PowerShell 5.0 - https://www.microsoft.com/en-us/download/details.aspx?id=50395
Przed aktualizacją PS zadbaj również o zainstalowanie bibliotek .NET
.NET 3.5 – http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=22
oraz
.NET 4 – http://www.microsoft.com/en-us/download/confirmation.aspx?id=17851
.NET 4.5 – http://www.microsoft.com/en-us/download/details.aspx?id=30653
Zanim przejdziemy do wydawania pierwszych poleceń zatrzymajmy się jeszcze chwilę by omówić dostępne opcje konfiguracji okna narzędzia PowerShell.
Po kliknięciu PPM na pasku tytułu okna PowerShell i wybraniu Właściwości w nowo otwartym oknie na czterech dostępnych zakładkach będziemy mogli zdefiniować sposób zachowania się konsoli.
Pierwszą zakładką są: Opcje zdefiniujemy tu takie ustawienia jak:
1 - Rozmiar kursora,
2 - Historia wydanych poleceń,
3 - Opcje edytowania:
Tryb szybkiej edycji oraz Tryb wstawiania - możliwość zaznaczenia tekstu w oknie konsoli oraz włączenie kopiowania i wklejania z/do okna wiersza poleceń,
Włącz skróty klawiaturowe z klawiszem CTRL - zezwala na nowe skróty klawiaturowe z wykorzystaniem klawisza CTRL,
Filtruj zawartość schowka przy wklejaniu - podczas wklejania tekstu do konsoli zostaje zastosowana akcja usunięcia tabulatorów oraz konwersja cudzysłowów drukarskich (tych używanych np. w Wordzie) na cudzysłowy proste.
4 - Zaznaczenie tekstu - opcje związane z zaznaczaniem tekstu,
5 - Użyj starszej konsoli - wymuszenie uruchomienia starszej wersji konsoli (część nowych opcji jak np. te związane z zaznaczaniem tekstu zostaną wyłączone).
Druga zakładka to: Czcionka
Na zakładce tej możemy zdefiniować rozmiar czcionki (punkt 1) oraz jej krój (punkt 2). Zdefiniowane ustawienia zostaną użyte w oknie konsoli, pogląd ustawień jest ukazany poniżej (punkt 3).
Na zakładce: Układ zostały zebrane opcje związane z rozmiarem okna (punkt 2) oraz jego położeniem (punkt 3). Dodatkowo możemy zdefiniować rozmiar bufora ekranu czyli ilość wyświetlanych informacji w oknie konsoli (punkt 1).
Na zakładce Kolory możemy zdefiniować opcje związane z kolorem tekstu bądź kolorem tła (punkt 1) oraz dodatkowo ustawić przezroczystość okna (punk 2).
Co jeszcze się nam przyda? To na pewno dostępne skróty klawiaturowe:
Strzałka w górę - historia poleceń, przejście w tył,
Strzałka w dół - historia poleceń, przejście w przód,
Page Up - pierwsze polecenie w historii poleceń,
Page Down - ostatnie polecenie w historii poleceń.
Home - przesunięcie kursora na początek wiersza polecenia.
End - przesunięcie kursora na koniec wiersza polecenia.
Ctrl+strzałka w lewo - przesunięcie kursora o jedno słowo w lewo,
Ctrl+strzałka w prawo - przesunięcie kursora o jedno słowo w prawo,
Ctrl+C - anulowanie wykonywanej operacji,
Ctrl+Break - zamknięcie okna konsoli Windows PowerShell,
Ctrl+Home - usunięcie znaków znajdujących się po lewej stronie kursora, znak znajdujący się w miejscu kursora nie jest usuwany,
Ctrl+End - usunięcie znaków znajdujących się po prawej stronie kursora, znak znajdujący się w miejscu kursora jest usuwany,
F1 - przesunięcie kursora o jeden znak w prawo,
F2 - wstawienie polecenia do wpisanego znaku,
F3 - wstawienie poprzedniego polecenia,
F4 - usunięcie znaków znajdujących się po prawej stronie kursora, znak znajdujący się w miejscu kursora jest usuwany,
F5 - historia poleceń, przejście w tył,
F7 - interaktywny wybór poleceń dostępnych z historii poleceń.
F8 - przejście w tył historii poleceń, wyświetlane są tylko te polecenia które pasują do już wpisanego tekstu,
F9 - wywołanie polecenia o określonym numerze. Numery poleceń są dostępne po wywołaniu okna historii (klawisz F7),
Alt+F7 - czyści listę historii poleceń.
Konsola PowerShell została skojarzona z następującymi typami plików:
PS1 – skrypt powłoki Windows PowerShell,
PSD1 – plik danych Windows PowerShell,
PSM1 – plik modułu Windows PowerShell,
PSC1 – plik konsoli Windows PowerShell,
PSSC – plik konfiguracji sesji Windows PowerShell,
Zacznijmy zatem od wydania pierwszych poleceń:
Jak już wspomniałem polecenie PS musi być zbudowane w oparciu o Czasownik-Rzeczownik, na przykład Get-ChildItem czy Stop-Process. Przyjęto iż czasowniki powinny być w czasie teraźniejszym zaś rzeczowniki w liczbie pojedynczej.
Takie podejście do sprawy bardzo ułatwia wydawanie komend i budowanie odpowiednich poleceń a dodatkowo zrozumienie sensu wydawanej komendy jest łatwiejsze. Niezaprzeczalnym atutem jest fakt iż w ten sposób uzyskano ujednolicenie wydawanych poleceń a dodatkowo budowa ich odbywa się na tych samych zasadach, co niestety w przypadku użycia narzędzia wiersza linii poleceń nie było zachowane. Np. w PowerShellu użycia parametru -Name wraz w połączeniu z cmdletem definiuje nazwę obiektu i parametr ten zarezerwowany jest tylko do tej czynności. W comand line często dochodziło do sytuacji w której użycie określonego przełącznika z danym narzędziem wywoływało całkiem odrębne efekty bądź sam sposób definiowania parametrów odbywał się raz z wykorzystaniem myślnika a raz przy użyciu ukośnika (mówiąc prościej w CLI każdego narzędzia należało uczyć się oddzielnie, gdyż każde z narzędzi posiada odrębną formę użycia dostępnych do wykorzystania parametrów). W PS został zastosowany jednolity model budowania składni poleceń.
Poniżej zestawiono standardowe czasowniki używane w konsoli PowerShell.
Czasownik | Alias | Znaczenie | Synonimy |
Czasowniki ogólne. | |||
Add | ad | Dodanie elementu do kontenera. | Append, Attach, Concatenate, Insert |
Clear | cl | Usunięcie elementu z kontenera. | Flush, Erase, Release, Unmark, Unset, Nullify |
Copy | cp | Skopiowanie elementu do kontenera bądź utworzenie jego kopi o innej nazwie. | Duplicate, Clone, Replicate |
Get | g | Pobranie danych. |
Read, Open, Cat, Type, Dir, Obtain, Dump, Acquire, Examine, Find, Search |
Hide | h | Ukrycie elementu. | Suppress |
Join | j | Dołączenie elementu. | Combine, Unite, Connect, Associate |
Lock | lk | Zablokowanie elementu. | Restrict, Bar |
Move | m | Przeniesienie elementu. | Transfer, Name, Migrate |
New | n | Utworzenie nowego elementu. | Create, Generate, Build, Make, Allocate |
Push | pu | Przeniesienie elementu na górę stosu. | Put, Add, Copy |
Pop | pop | Usunięcie elementu z góry stosu. | Remove, Paste |
Remove | r | Usunięcie elementu z kontenera. | Delete, Kill |
Rename | rn | Zmiana nazwy. | Ren, Swap |
Search | sr | Wyszukanie elementu | Find, Get, Grep, Select |
Select | sc | Wybranie elementu. | Pick, Grep, Filter |
Set | s | Ustawienie parametrów. | Write, Assign, Configure |
Show | sh | Pobranie i wyświetlenie informacji o wybranym elemencie a także sformatowanie tych informacji. | Display, Report |
Split | sl | Dzieli dane na mniejsze elementy. | Divide, Chop, Parse |
Unlock | uk | Odblokowanie elementu. | Free, Unrestrict |
Use | u | Użycie elementu. | With, Having |
Czasowniki używane podczas komunikacji. | |||
Connect | cc | Nawiązanie połączenia. | Join, Telnet |
Disconnect | dc | Zakończenie połączenia. | Break, Logoff |
Read | rd | Uzyskanie informacji (lokalnie). | Prompt, Get |
Receive | rc | Uzyskanie informacji (zdalnie). | Read, Accept, Peek |
Send | sd | Zapisanie informacji (zdalnie). | Put, Broadcast, Mail |
Write | wr | Zapisanie informacji (lokalnie). | Put, Print |
Czasowniki związane z pracą z danymi. | |||
Backup | ba | Utworzenie kopii zapasowej danych. | Save, Burn |
Checkpoint | ch | Utworzenie migawki bieżącego stanu konfiguracji. | Diff, StartTransaction |
Compare | cr | Porównanie danych ze sobą. | Diff, Bc |
Convert | cv | Konwersja danych z jednego formatu w drugi. | Change, Resize, Resample |
ConvertFrom | cf | Konwersja danych wejściowych. | Export, Output, Out |
ConvertTo | ct | Konwersja danych wyjściowych. | Import, Input, In |
Dismount | dm | Odłączenie elementu. | Unlink |
Export | ep | Export elementu. | Extract, Backup |
Import | ip | Import elementu. | Load, Read |
Initialize | in | Zainicjowanie elementu. | Setup, Renew, Rebuild |
Limit | l | Nałożenie ograniczenia na zasób. | Quota, Enforce |
Merge | mg | Utworzenie pojedynczej instancji danych z wielu ich zbiorów. | Combine, Join |
Mount | mt | Dołączenie elementu. | Attach, Link |
Out | o | Wysłanie elementu. | Print, Format, Send |
Publish | pb | Opublikowanie zasobu. | Deploy, Release, Install |
Restore | rr | Przywrócenie stanu elementu z wcześniej wykonanej migawki.. | Repair, Return, Fix |
Unpublish | ub | Anulowanie publikacji zasobu. | Uninstall, Revert |
Update | ud | Aktualizacja bądź odświeżenie elementu. | Refresh, Renew, Index |
Czasowniki używane przy diagnozowaniu. | |||
Debug | db | Zbadanie elementu, diagnozowanie stanu. | Attach, Diagnose |
Measure | ms | Identyfikacja i statystyka elementu. | Calculate, Determine, Analyze |
Ping | pi | Sprawdzenie czy zasób jest aktywny. | Connect, Debug |
Resolve | rv | Użycie odwzorowania. | Expand, Determine |
Test | t | Weryfikuje prawidłowość lub spójność elementu. | Diagnose, Verify, Analyze |
Trace | tr | Śledzi aktywność zasobu. | Inspect, Dig |
Czasowniki określające | |||
Disable | d | Zablokowanie elementu. | Halt, Hide |
Enable | e | Konfiguruje element tak, aby był dostępny. | Allow, Permit |
Install | is | Instalacja elementu. | Setup, Configure |
Invoke | i | Wywołuje lub uruchamia aktywność, która nie może być przerwana. | Run, Call, Perform |
Restart | rt | Zatrzymanie operacji i jej ponowne uruchomienie. | Recycle, Hup |
Resume | ru | Wznowienie operacji. | Continue |
Start | sa | Uruchomienie elementu. | Launch, Initiate |
Stop | sp | Zatrzymanie elementu. | Halt, End, Discontinue |
Suspend | ss | Wstrzymanie operacji bez jej zakończenia. | Pause, Sleep, Break |
Uninstall | us | Usunięcie elementu z określonej lokalizacji. | Remove, Clear, Clean |
Wait | w | Wstrzymuje element do wystąpienia zdarzenia. | |
Czasowniki związane z bezpieczeństwem. | |||
Block | bl | Ograniczenie dostępu do zasobu. | Prevent, Limit, Deny |
Grant | gr | Przyznanie dostępu do zasobu. | Allow, Enable |
Revoke | rk | Cofnięcie dostępu do zasobu. | Remove, Disable |
Unblock | ul | Usunięcie ograniczeń dostępu do zasobu. | Clear, Allow |
Rozpocznijmy od prostego przykładu wylistowania aktualnie uruchomionych procesów. Listę aktywnych procesów uzyskamy po wydaniu polecenia: Get-Process Jak widać poniżej efektem wydania polecenia jest tabela obiektów w której zostały zebrane aktualnie wykonywane zadania.
Gdybyśmy listę tą chcieli zawęzić do wyświetlenia tylko konkretnych zadań należy do cmdletu Get-Process dodać parametr -Name po którym to definiujemy nazwę interesującego nas procesu: Get-Process -Name <nazwa> Poniżej przykład wyświetlenia procesu aplikacji Acrobat Reader oraz przeglądarki Firefox.
Oczywiście w połączeniu z danym cmdletem możemy użyć wielu parametrów – poniżej znajdziesz przykład użycia polecenia Get-Services odpowiedzialnego za wyświetlenie informacji o usługach. Wraz z cmdletem zostały użyte dwa parametry: -Name oraz -ServicesDebendedOn Wydane polecenie spowoduje wyświetlenie informacji od jakich usług zależna jest usługa Windows Update.
Podczas wydawania długich komend może dojść do sytuacji w której definiowane polecenie nie mieści się w jednej linii. Fakt ten powoduje, że polecenie staje się mniej czytelne. Dlatego też przy budowaniu poleceń można posłużyć się operatorem rozpoczęcia nowej linii bez jej zakańczania - tzw. grawis (`) - na klawiaturze wraz z znakiem tyldy, obok 1. Użycie znaku spowoduje przejście do nowej linii w której możemy kontynuować definiowanie polecenia. Poniżej przykład użycia tego samego polecenia co w przykładzie powyżej z tą różnicą iż definicja każdego z parametrów następuje w oddzielnej linii.
Wadą tak zdefiniowanego polecenia (szczególnie w starszych wersjach konsoli PS) jest ponowne użycie komendy z wykorzystaniem historii poleceń - każdą linię należy ładować osobno. Problem nie występuje w wersji PS 5.0.
Możliwe jest również odwrócenie sytuacji tzn. wydanie kilku komend, których definicja jest umieszczona w jednej linii wiersza. Aby czynność tą wykonać polecenia oddzielamy od siebie średnikiem (;).
Dodatkowo gdy w nazwie elementu (usługa/proces/plik) zostały zawarte spacje przy jego definicji używamy znaku pojedynczego cudzysłowia (‘) bądź znaku podwójnego cudzysłowia ("). Nazwa elementu musi być zawarta pomiędzy cudzysłowami.
Tak samo jak w systemie Linux tak i w PowerShellu możliwe jest stosowanie aliasów czyli uproszczenia polegającego na zastosowaniu skrótu celem wywołania określonego polecenia. Alias jest więc skrótem nazwy.
W konsoli PS wiele aliasów już na starcie zostało wstępie zdefiniowanych. Przykładem takiego aliasu jest wykorzystanie np. polecenia cls odpowiedzialnego za wyczyszczenie ekranu konsoli. Tak naprawdę funkcję tą wykonuje komenda: Clear-Host a cls jest tylko aliasem owej funkcji. Tak samo jak aliasem Get-Childitem jest ls czy dir których użycie pozwala nam na wylistowanie aktywnego katalogu.
Aby poznać listę wszystkich natywnie zdefiniowanych aliasów możemy posłużyć się poleceniem: Get-Alias
Oczywiście nic nie stoi na przeszkodzie by takowe aliasy utworzyć sobie samemu. Do tworzenia aliasów wykorzystujemy cmdlet: New-Alias Wykorzystanie cmdletu sprowadza się do zdefiniowania własnego aliasu oraz docelowej komendy - wg. wzoru: New-Alias -Name <nazwa_aliasu> -Value <komenda>
Poniżej na przykładzie utworzenie nowego aliasu o nazwie pokaz, który będzie wykonywał funkcję listowania katalogu.
Z aliasami (i nie tylko) jest o tyle problem, gdyż zdefiniowane w jednej instancji konsoli PS nie są dostępne w drugiej a dodatkowo utworzone aliasy są tracone po zamknięciu bieżącej sesji konsoli.
Rozwiązaniem tego problemu może być eksport utworzonych aliasów do zewnętrznego pliku a następnie ich import do aktualnie aktywnej sesji konsoli PowerShell.
Eksport aliasów realizujemy za pomocą komendy: Export-Alias -Path <ścieżka_pliku> (parametr: -Description pozwala na ustalenie opisu). Na rysunku niżej ukazano eksport aliasów do zewnętrznego pliku aliasy.txt Jak można zauważyć oprócz aliasów utworzonych ręcznie, również eksportowane są aliasy domyślne.
Aby zaimportować aliasy należy użyć polecenia: Import-Alias -Path <ścieżka_pliku> (zastosowanie parametru: -ErrorAction Ignore spowoduje nie wyświetlenie monitu błędu o imporcie aliasu, który domyślnie w konsoli jest już zdefiniowany).
Innym rozwiązaniem bardziej wygodnym jest zapisanie naszych ustawień w profilu, tak by po uruchomieniu konsoli PS potrzebne nam aliasy były od razu gotowe do użycia.
Jedną z cech PowerShella jest to, że konfiguracja ustawień naszej konsoli (aliasy, używane moduły) jest tracona po jej zamknięciu. Oznacza to, że za każdym razem potrzebne nam ustawienia musimy konfigurować od nowa. Aby nie dopuścić do takiej sytuacji potrzebne nam ustawienia możemy zdefiniować w pliku profilu, który wraz z zawartą konfiguracją automatycznie ładowany jest podczas każdego startu konsoli.
W PowerShellu do dyspozycji mamy 6 oddzielnych profili:
Profile lokalne:
- <katalog_domowy>\Documents\WindowsPowerShell\Profile.ps1
- <katalog_domowy>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
- <katalog_domowy>\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
Profile globalne:
- <katalog_instalacyjny_PS>\Profile.ps1
- <katalog_instalacyjny_PS>\Microsoft.PowerShell_profile.ps1
- <katalog_instalacyjny_PS>\Microsoft.PowerShellISE_profile.ps1
Profile te zostały zgrupowane w dwóch kategoriach:
- profil lokalny - dotyczy danego użytkownika, plik profilu umieszczany jest w katalogu domowym użytkownika,
- profil globalny - dotyczy wszystkich użytkowników, plik profilu umieszczany jest w katalogu instalacyjnym PS - domyślnie: Windows\System32\WindowsPowerShell
Dodatkowo plik profilu może odnosić się zarówno do konsoli PS jak i narzędzia graficznego PS ISE (Profile.ps1), tylko do samej konsoli PS (Microsoft.PowerShell_profile.ps1) bądź tylko do edytora graficznego PS ISE (Microsoft.PowerShellISE_profile.ps1).
W PS domyślnie zdefiniowana została zmienna: $PROFILE Zadaniem zmiennej jest przechowanie informacji o domyślnej lokalizacji profilu użytkownika. Wywołanie jej spowoduje wyświetlenie pełnej ścieżki dostępu do profilu (punkt 1).
Za każdym razem gdy otwieramy nową instancję konsoli PS, narzędzie próbuje wczytać plik profilu. Fakt istnienia profilu zweryfikujemy po wydaniu polecenia: Test-Path $PROFILE Jak widać poniżej po wydaniu komendy zwrócona została wartość: False, oznacza to, że plik Microsoft.PowerShell_profile.ps1 odpowiedzialny za profil użytkownika lokalnego nie istnieje.
Aby móc zdefiniować nasz profil musimy zacząć od utworzenia samego pliku. Plik profilu utworzymy za pomocą polecenia: New-Item -Path $PROFILE -Type File -Force (parametry: -Path określa ścieżkę profilu; -Type File że tworzony obiekt to plik; zaś -Force wymusza utworzenie pliku).
Po utworzeniu pliku definiujemy jego ustawienia. Do otwarcia pliku i jego edycji wykorzystamy edytor graficzny. Wydajemy polecenie: ise $PROFILE
Po otwarciu edytora możemy zdefiniować aliasy jakie mają obowiązywać wraz z uruchomieniem konsoli PS. Poniżej dodatkowo przy wykorzystaniu polecenia: Set-Location została zdefiniowana domyślna ścieżka.
Po zapisie pliku celem sprawdzenia przeprowadzonej konfiguracji, ponownie uruchamiamy konsolę PS. I tu możemy natknąć się na „niespodziankę”. Gdyż może okazać się że zdefiniowane polecenia nie mogą zostać wykonane gdyż zabraniają na to domyślne ustawienia konsoli.
W PowerShellu istnieją cztery (a tak naprawdę 6) tryby wykonawcze, które określają jaki rodzaj kodu może być wykonany.
Dostępne tryby pozwalające na zdefiniowanie wykonania kodu to:
Restricted: ustawienie domyślne, które nie pozwala uruchamiać skryptów. Dozwolone są tylko polecenia wydawana z wiersza linii poleceń. Zasada domyślnie ustawiona w systemach Windows Server 2012, Windows 8 oraz Windows 10.
All Signed: uruchamia wszystkie skrypty i pliki konfiguracyjne pod warunkiem iż są one podpisane przez zaufanego dostawcę.
Remote Signed: lokalne skrypty uruchamiane są bez podpisu natomiast wszelkie pobrane skrypty potrzebują podpisu cyfrowego (dotyczy to również skryptów pobieranych z sieci lokalnej). Domyślna zasada w systemach Windows Server 2012 R2 i Windows 8.1
Unrestricted: zasada zezwala na wykonywanie skryptów bez żadnych ograniczeń.
Domyślne ustawienie Restricted uniemożliwia wykonanie poleceń zawartych w pliku profilu (plik ten tak naprawdę jest plikiem skryptu). Aby zmienić domyślne ustawienie, należy uruchomić konsolę w trybie administracyjnym (potrzeba uprawnień administratora, gdyż będzie zmieniana wartość rejestru) a następnie wydać polecenie: Set-ExecutionPolicy -ExecutionPolicy <wybrany_tryb> Wprowadzaną zmianę musimy dodatkowo potwierdzić.
Po zmianie ustawień ponownie uruchamiamy konsolę PS, jak widać poniżej ustawienia zapisane w pliku profilu mają zastosowanie.
Nieodzownym elementem pracy z PS jest również wykorzystanie funkcji przetwarzania potokowego czyli przekazywania wartości uzyskanych dzięki wydaniu jednego polecenia do polecenia drugiego.
Przypuśćmy, że chcemy uzyskać dokładne informacje na temat aktualnie uruchomionego procesu - niech to będzie proces edytora tekstu Word. Wydanie polecenia: Get-Process -Name Winword spowoduje dostarczenie tylko podstawowych danych o procesie.
Przekazanie danych uzyskanych dzięki wydaniu polecenia Get-Process do kolejnego spowoduje wyświetlenie bardziej szczegółowych informacji. Dane przekażemy do cmdletu: Select-Object. Aby móc zestawić ze sobą oba polecenia należy wykorzystać znak pionowej kreski (znak pisarski nazywany również „pipe”). Znak pionowej kreski w PS odpowiada za przekazanie obiektów uzyskanych dzięki wydaniu danego polecenia do polecenia drugiego. Ponieważ interesuje nas uzyskanie jak najbardziej szczegółowych informacji o danym procesie po cmdlecie Select-Object zostaje wstawiona gwiazdka.
Po wydaniu polecenia: Get-Process -Name WINWORD | Select-Object * wyświetlenie wszystkich informacji na pewno zajmie więcej niż jeden ekran. Aby zatrzymać wyświetlanie wyników aktualnie wykonywanego polecenia uzyskane dane przekażemy do następnego polecenia: more Wykorzystanie more sprawi, że wyświetlanie informacji zatrzyma się po zapełnieniu okna PS. Wciśnięcie klawisza spacji spowoduje dalsze wyświetlenie kolejnego ekranu (aż do zapełnienia) natomiast użycie klawisza Enter spowoduje wyświetlanie informacji wiersz po wierszu.
Jeśli chcemy uzyskać konkretne informacje, atrybuty reprezentujące dane obiekty umieszczamy po cmdlecie Select-Object, oddzielając je od siebie przecinkami. Poniżej przykład w którym zostaje wyświetlona informacja o ID procesu Word oraz lokalizacja pliku.
Po wyborze konkretnych obiektów i zatwierdzeniu wykonania polecenia może dojść do sytuacji w której reprezentacja uzyskanych wyników może być dla nas nieczytelna. W przykładzie powyżej z odczytaniem uzyskanych informacji nie ma problemu lecz jeśli do polecenia dodalibyśmy kolejne obiekty odczytanie informacji nie będzie już takie proste (dotyczy wersji PS do 4.0).
Poniżej przykład w którym chcemy uzyskać bardziej szczegółowe informacje o procesie SkyDrive (nazwa procesu, opis, ID oraz ścieżka) - jak można zauważyć część danych jest dla Nas nie dostępna (informacja o ścieżce). Dzieje się tak ponieważ do reprezentacji wyników został użyty domyślny układ tabeli.
Aby zmienić domyślny układ prezentacji danych, polecenie nakazujące ich wyświetlenie celem sformatowania przekażemy do cmdletu Format-Table z parametrem -AutoSize. Po wydaniu polecenia tabela zostaje dostosowana do zawartych w niej treści – odczyt ścieżki pliku nie jest już dla nas utrudnieniem. Użycie Format-Table spowoduje zablokowanie możliwości dalszego przekazywania obiektów gdyż wyświetlone dane są w rzeczywistości tabelą z wypełnionymi danymi.
Powyższy problem nie dotyczy wersji PS 5.0 gdyż w przypadku tej wersji dane są formatowane w sposób automatyczny, tak by było możliwe ich odczytanie. Jak widać poniżej ponowne wydanie komendy spowodowało umieszczenie wyników w oddzielnych liniach.
Aby zawęzić ilość wyświetlanych wyników możemy posłużyć się następującymi przełącznikami:
-First <liczba> - wyświetla liczbę n pierwszych wartości - punkt 1,
-Last <liczba> - wyświetla liczbę n ostatnich wartości - punkt 2,
-Skip <liczba> - pomija zdefiniowaną liczbę wartości - punkt 3 (w przykładzie została wyświetlona druga piątka).
Oprócz wyświetlenia określonej liczby wartości, uzyskane wyniki możemy sortować. Aby móc posortować wyniki należy je przekazać do cmdletu: Sort-Object. Domyślnie sortowanie w przypadku wyrazów odbywa się od A do Z a liczb od 1 w górę. Aby odwrócić proces sortowania należy użyć przełącznika: -Descending.
Poniżej przykład wyświetlenia listy 10 obiektów uzyskanych dzięki wydaniu polecenia: Get-Process (lista aktualnie uruchomionych procesów), posortowanych rosnąco według identyfikatora procesu (punkt 1) oraz lista 10 obiektów wykorzystująca procesor w największym stopniu (procesy są posortowane malejąco) - punkt 2
Aby uzyskać potrzebne nam dane musimy zawsze chwilę zastanowić się nad konstrukcją wydawanego polecenia gdyż użycie nieprawidłowej składni spowoduje uzyskanie wyników, które nie zawsze będą spełniały nasze oczekiwania. Przeanalizujmy poniższe polecenie w którym to zamieniono kolejność przetwarzania cmdletów – przykład taki sam co powyżej czyli lista 10 procesów posortowana w kolejności rosnącej według identyfikatora. Na potrzeby ćwiczenia cmdlety Select-Object oraz Sort-Object zostały zamienione miejscami. Po wydaniu komendy uzyskaliśmy posortowaną listę procesów – Ale czy do końca o to nam chodziło? Spójrz na rysunek poniżej. Cmdlet Get-Process pobrał listę procesów, które zostały przekazane do cmdletu Select-Object, ten z kolei wybrał pierwszych dziesięć. Kolejna instrukcja Sort-Object posortowała wybrane elementy według identyfikatora.
Jak widać po powyższym przykładzie zdefiniowana kolejność wykonywania poszczególnych cmdletów nie jest bez znaczenia. Gdyż najpierw powinna być wykonana operacja sortowania a następnie z posortowanych elementów wybrane pierwszych dziesięć. Na rysunku poniżej jeszcze raz różnica pomiędzy poleceniami.
A co w przypadku którym chcemy wyświetlić procesy bądź usługi zaczynające się na określoną literę? Aby takie zadanie wykonać należy wykorzystać cmdlet Where-Object.
Wyświetlmy zatem wszystkie usługi zaczynające się na literę P.
Aby wykonać zadanie za pomocą cmdletu Get-Service wyświetlamy listę dostępnych procesów, lista obiektów następnie zostaje przekazana do Where-Object gdzie za pomocą definicji Name wypieramy obiekt a następnie przy wykorzystaniu przełącznika -Like p* nakazujemy wyświetlenie tylko tych, których nazwy rozpoczynają się na p (gwiazdka oznacza iż po p może wystąpić dowolny ciąg znaków).
Oczywiście nic nie stoi na przeszkodzie by wykorzystać już zdobytą wiedzę i wyświetlone elementy posortować np. według statusu. Do tego celu oczywiście wykorzystujemy cmdlet Sort-Object.
Aby wyświetlić elementy kończące się na dany ciąg znaków np. nt modyfikujemy polecenie umieszczając po parametrze -Like odpowiednią instrukcję: *nt
Wykorzystanie parametru -Match spowoduje wyświetlenie obiektów w których występuje określony ciąg znaków. W przykładzie poniżej zostały wyświetlone tylko usługi, które w obiekcie Nazwa wyświetlana zawierają słowo: update Analogicznie zastosowanie parametru -NotMatch spowoduje wyświetlenie tylko tych elementów, które zdefiniowanego ciągu nie zawierają.
To nie są jeszcze wszystkie możliwości cmdletu Where-Object ale nie raz do niego będziemy wracać.
Gdy na przykład chcemy pogrupować dane elementy możemy wykorzystać do tego celu cmdlet Group-Object. Odpowiedzmy może sobie na takie pytanie – Ile usług jest uruchomionych a ile zatrzymanych?
Aby wykonać zadanie do tego celu należy wykorzystać cmdlet Get-Service w połączeniu z Group-Object.
Powoli zbliżamy się do końca tego pierwszego wpisu na temat PowerShella lecz zanim zakończymy jeszcze kilka słów na temat uzyskiwania pomocy.
Nie raz spotkasz się użytkowniku z sytuacją w której będziesz musiał z takowej pomocy skorzystać by wykonać zamierzone zadania.
Zacznijmy więc od pierwszego polecenia, które pozwoli poznać Ci z jakich cmdletów w ramach PS możesz korzystać.
Listę wszystkich dostępnych cmdletów w ramach modułu PS poznasz po wydaniu polecenia: Get-Command -Module Microsoft.PowerShell.Management
Użycie samego Get-Command wyświetli wszystkie funkcje, cmdlety dostępne w ramach całego narzędzia PS.
Aby przefiltrować dostępne polecenia względem wybranego modułu możemy wykorzystać polecenie: Get-Command -Module <nazwa_modułu>
Moduły w PowerShellu zbierają w formie jednej paczki skrypty wraz z zdefiniowanymi funkcjami i poleceniami. W przypadku PS na starcie dostępnych jest wiele modułów, które odpowiedzialne są za konfigurację poszczególnych ról i funkcji systemu. Tak więc spotkamy się z modułami do zarządzania np. usługą Hyper-V, IIS czy Active Directory.
Import modułu następuje za pomocą cmdletu: Import-Module <nazwa_modułu>. Poniżej przykład zaimportowania modułu: VPNClient (punkt 1). Po zaimportowaniu modułu, fakt jego załadowania możemy sprawdzić za pomocą komendy: Get-Module (punkt 2).
Aby dany moduł wyłączyć należy wydać polecenie: Remove-Module <nazwa_modułu>
Aby uzyskać listę dostępnych modułów należy wydać polecenie: Get-Module -ListAvailable
W przypadku, gdy ładowany moduł jest zapisany w katalogu domyślnym narzędzia PS jako argument polecenia: Import-Module podajemy jego nazwę. W przypadku importu modułu nie zapisanego w domyślnej lokalizacji należy podać pełną ścieżkę dostępu. Od wersji PowerShell 3.0 modułów nie trzeba ładować ręcznie, gdyż podczas wpisywania danego polecenia konsola odpowiedni moduł zawierający te polecenie załaduje automatycznie.
Aby uzyskać informacje o poleceniach przypisanych do danego czasownika (punkt 1, przełącznik: -Verb) bądź rzeczownika (punkt 2, przełącznik: -Noun) należy użyć odpowiednich przełączników.
Przefiltrowanie wyników pod kątem nazwy odbywa się z wykorzystaniem przełącznika: -Name <szukana_nazwa>.
Aby odszukać np. tylko same cmdlety należy w połączeniu z Get-Command użyć parametru: -Type
Dostępne są jeszcze następujące typy:
- alias - lista zdefiniowanych aliasów,
- function - lista funkcji,
- application - lista aplikacji,
- all - pokaż wszystko,
- script - lista skryptów.
Wyniki uzyskane dzięki użyciu polecenia Get-Command są dość skromne gdyż informują tylko Nas o istnieniu danego polecenia nie precyzując informacji na temat np. składni danej komendy.
Dlatego też by uzyskać bardziej szczegółowe informacje możemy posłużyć się cmdletem: Get-Help.
Aby uzyskać więcej informacji o danym cmdlecie (niech będzie to cmdlet: Get-Process) należy wydać polecenie: Get-Help <nazwa>
Po wydaniu polecenia uzyskamy informacje o:
- nazwie,
- składni,
- aliasach,
- dodatkowych uwagach m.in. odnośnik do strony internetowej czy przykład zastosowania.
Uzyskane informacje pomocy nie są pełne dlatego też warto pomoc tą uaktualnić. Uaktualnienie pomocy dokonamy po wywołaniu polecenia: Update-Help
Poniżej przykład wydania tego samego polecenia, którego celem jest uzyskanie informacji o cmdlecie Get-Process lecz po uaktualnieniu pomocy. Na pierwszy rzut oka widać iż zwracane informacje są bogatsze.
W przypadku uaktualnienia pomocy na komputerach, które łączności z Internetem nie mają możemy skorzystać z możliwości eksportu pliku pomocy. Eksport wykonamy za pomocą polecenia: Save-Help -Module Microsoft.PowerShell.Management -DestinationPath <ścieżka_dostępu> (eksport pomocy modułu PS). Aby wyeksportować pomoc wszystkich modułów użyj komendy: Save-Help -Module * -DestinationPath <ścieżka_dostępu>.
Aby na maszynie docelowej uaktualnić moduł pomocy korzystamy z cmdletu Update-Help - Update-Help -Module Microsoft.PowerShell.Management -SourcePath <ścieżka-dostępu> i analogicznie gdy chcemy wykonać import wszystkich modułów pomocy - Update-Help -Module * -SourcePath <ścieżka_dostępu>
Aby uzyskać jeszcze bardziej szczegółowe informacje o danym cmdlecie podczas definicji polecenia pokazania pomocy możemy skorzystać z przełącznika: -Detailed
Zastosowanie parametru: -Examples ograniczy plik pomocy tylko do przykładów zaś parametr: -Full wyświetli komplet informacji na temat sprawdzanego cmdletu.
I ostatnia kwestia – Czyli jak się bronić przed samym sobą? Gdy Czytelniku będziesz testował polecenia PS i do końca nie będziesz w stanie przewidzieć efektu końcowego warto zastosować dwa przełączniki.
- WhatIf - zastosowanie przełącznika spowoduje wyświetlenie efektu wydania polecenia lecz bez jego wykonania,
- Confirm - potwierdzenie wykonania danej operacji.
Poniżej przykład zastosowania parametru: -WhatIf czyli - Co się stanie gdybyśmy np. chcieli zatrzymać wszystkie procesy zaczynające się na literę S?
Przedstawione powyżej opcje należą do grupy parametrów, które mają zastosowanie do wszystkich poleceń PS.
Lista obowiązkowych parametrów obejmuje również takie opcje jak:
- Debug - informacje o działaniu polecenia (przydatne między innymi programistom),
- ErrorAction - sposób zachowania się polecenia na mogące wystąpić błędy, błędy nie przerywające wykonywanie polecenia. Dostępne wartości: Continue, Ignore, Inquire, Stop, Suspend oraz SilentlyContinue,
- ErrorVariable - definicja zmiennej, która przechowuje powiadomienia o zaistniałych błędach,
- WarningAction - sposób zachowania się polecenia na mogące wystąpić ostrzeżenia Dostępne wartości: Continue, Stop, Inquire oraz SilentlyContinue.
- WarningVariable - definicja zmiennej, która przechowuje powiadomienia o zaistniałych ostrzeżeniach,
- Verbose - wyświetlenie szczegółowych informacji o działaniu polecenia.
I na tym kończymy (ten wpis). Myślę, że po zapoznaniu się z tymi podstawowymi informacjami na temat konsoli PS, będziesz mógł swoją przygodę z PS Czytelniku zacząć bez przeszkód. W następnej odsłonie poruszymy temat zmiennych (lecz nie tylko).
BIBLIOGRAFIA:
https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx
https://en.wikipedia.org/wiki/PowerShell
http://www.howtogeek.com/50236/customizing-your-powershell-profile/
https://technet.microsoft.com/en-us/library/ff461033.aspx
http://www.howtogeek.com/106273/how-to-allow-the-execution-of-powershell-scripts-on-windows-7/
Komentarze
Pozdrawiam
Czekam z niecierpliwości ą na kolejne!!!