Historycznie, narzędzia wiersza poleceń w systemach Unix zostały rozwinięte lepiej niż w Windows, jednak wraz z pojawieniem się nowego rozwiązania sytuacja uległa zmianie.
Windows PowerShell umożliwia administratorom systemów automatyzację większości rutynowych zadań. Dzięki niej można zmieniać ustawienia, zatrzymywać i uruchamiać usługi oraz przeprowadzać konserwację większości zainstalowanych aplikacji. Traktowanie niebieskiego okna jako kolejnego interpretera poleceń byłoby błędne. Takie podejście nie odzwierciedla istoty innowacji proponowanych przez firmę Microsoft. W rzeczywistości możliwości Windows PowerShell są znacznie szersze: w krótkim cyklu artykułów spróbujemy rozwiązać, czym rozwiązanie Microsoftu różni się od bardziej znanych nam narzędzi.
Główne możliwości
Oczywiście, Windows PowerShell to przede wszystkim powłoka poleceń z językiem skryptowym, pierwotnie stworzona w oparciu o platformę .NET Framework, a później na .NET Core. W przeciwieństwie do powłok, które przyjmują i zwracają dane tekstowe, Windows PowerShell działa z klasami .NET, które mają właściwości i metody. PowerShell pozwala wykonywać standardowe polecenia, a także daje dostęp do obiektów COM, WMI i ADSI. Wykorzystuje różne magazyny, takie jak system plików czy rejestr Windows, do których dostęp zapewniają tzw. dostawcy (providers). Warto zwrócić uwagę na możliwość osadzania komponentów wykonywalnych PowerShell w innych aplikacjach, aby realizować różne operacje, w tym przez interfejs graficzny. Słuszne jest także odwrotne stwierdzenie: wiele aplikacji systemu Windows udostępnia dostęp do swoich interfejsów zarządzania przez PowerShell.
Windows PowerShell umożliwia:
- Zmianę ustawień systemu operacyjnego;
- Zarządzanie usługami i procesami;
- Konfigurowanie ról i komponentów serwera;
- Instalowanie oprogramowania;
- Zarządzanie zainstalowanym oprogramowaniem przez specjalne interfejsy;
- Osadzanie komponentów wykonywalnych w zewnętrznych programach;
- Tworzenie skryptów do automatyzacji zadań administracyjnych;
- Pracę z systemem plików, rejestrem Windows, magazynem certyfikatów itd.
Powłoka i środowisko programistyczne
Windows PowerShell istnieje w dwóch wersjach: oprócz emulacji konsoli z powłoką poleceń, jest zintegrowane środowisko skryptowe (Integrated Scripting Environment - ISE). Aby uzyskać dostęp do interfejsu wiersza poleceń, wystarczy wybrać odpowiednią ikonę w menu Windows lub uruchomić powershell.exe z menu „Uruchom”. Na ekranie pojawi się niebieskie okno, znacznie różniące się możliwościami od przestarzałego cmd.exe. Oferuje automatyczne uzupełnianie i inne funkcje, do których przyzwyczaili się użytkownicy powłok Unix.

Aby korzystać z powłoki, należy zapamiętać kilka kombinacji klawiszy:
- Strzałki w górę i w dół przewijają historię, aby powtarzać wcześniej wprowadzone polecenia;
- Strzałka w prawo na końcu wiersza ponownie wprowadza poprzednie polecenie znak po znaku;
- Ctrl+Home usuwa wprowadzony tekst od pozycji kursora do początku wiersza;
- Ctrl+End usuwa tekst od kursora do końca wiersza.
F7 wyświetla okno z wprowadzonymi poleceniami i pozwala wybrać jedno z nich. W konsoli działa również zaznaczanie tekstu myszą, kopiowanie i wklejanie, ustawianie kursora, usuwanie, backspace — wszystko, co lubimy.

Windows PowerShell ISE to kompletne środowisko programistyczne z edytorem kodu wspierającym karty oraz podświetlanie składni, kreatorem poleceń, wbudowanym debugerem i innymi radościami dla programistów. Jeśli w edytorze tego środowiska programistycznego po nazwie polecenia wpiszesz znak minus, uzyskasz w rozwijanej liście wszystkie dostępne parametry z określeniem typu. Uruchomić PowerShell ISE można albo przez skrót w menu systemowym, albo za pomocą pliku wykonywalnego powershell_ise.exe.

Cmdlety
W Windows PowerShell pojawiły się tzw. cmdlety (cmdlets). To wyspecjalizowane klasy .NET, które oferują różnorodne funkcje. Są one nazywane według zasady „Czynność-Obiekt” (lub „Czasownik-Rzeczownik”, jeśli wolisz), a połączenie rozdzielone myślnikiem przypomina orzeczenie i podmiot w zdaniach naturalnych języków. Na przykład Get-Help dosłownie oznacza „Uzyskaj-Pomoc” lub w kontekście PowerShell: „Pokaż-Pomoc”. W zasadzie jest to odpowiednik komendy man w systemach Unix, a podręczniki w PowerShell należy żądać dokładnie w ten sposób, a nie wywołując cmdlety z kluczem —help lub \/?. Nie zapominaj też o dokumentacji online dotyczącej PowerShell: Microsoft ma ją dość szczegółową.
Oprócz polecenia Get w poleceniach używane są również inne czasowniki (i nie tylko czasowniki, ścisłe mówiąc). Poniżej przedstawiamy kilka przykładów:
Dodaj — dodać;
Wyczyść — wyczyścić;
Włącz — aktywować;
Wyłącz — dezaktywować;
Nowe — stworzyć;
Usuń — usunąć;
Set — ustawić;
Rozpocznij — uruchomić;
Stop — zatrzymać;
Eksport — eksportować;
Import — importować.
Istnieją polecenia systemowe, użytkownika i opcjonalne: w wyniku ich wykonania wszystkie zwracają obiekt lub tablicę obiektów. Nie są wrażliwe na wielkość liter, tzn. z punktu widzenia interpretatora komend nie ma różnicy między Get-Help a get-help. Do oddzielania stosuje się symbol ‘;’, jednak należy go stosować tylko w przypadku, gdy w jednej linii wykonywanych jest kilka poleceń.
Polecenia Windows PowerShell grupowane są w moduły (NetTCPIP, Hyper-V itd.), a do wyszukiwania według obiektu i akcji istnieje polecenie Get-Command. Można wyświetlić pomoc na jego temat w ten sposób:
Get-Help Get-Command 
Domyślnie polecenie wyświetla skróconą pomoc, jednak do poleceń możemy przekazywać parametry (argumenty), jeśli zajdzie potrzeba. Dzięki nim można na przykład uzyskać szczegółową (parametr -Detailed) lub pełną (parametr -Full) pomoc, a także wyświetlić na ekranie przykłady (parametr -Examples):
Get-Help Get-Command -ExamplesPomoc w Windows PowerShell jest aktualizowana przez polecenie Update-Help. Jeśli linia poleceń staje się zbyt długa, argumenty polecenia można przenieść do następnej, pisząc znak specjalny ‘`’ i naciskając Enter — po prostu zakończenie pisania polecenia w jednej linii i kontynuowanie w drugiej nie zadziała.
Poniżej przedstawiamy kilka przykładów popularnych poleceń:
Get-Process — pokaż uruchomione w systemie procesy;
Get-Service — pokaż usługi i ich status;
Get-Content — wyświetl zawartość pliku.
Dla często używanych poleceń i zewnętrznych narzędzi w Windows PowerShell istnieją krótkie synonimy — aliasy (z ang. Alias). Na przykład, dir — alias Get-ChildItem. W liście synonimów znajdują się również odpowiedniki poleceń z systemów Unix (ls, ps itd.), a polecenie Get-Help uruchamiane jest poleceniem help. Pełną listę synonimów można zobaczyć za pomocą polecenia Get-Alias:

Skrypty, funkcje, moduły i język PowerShell
Skrypty Windows PowerShell są przechowywane w postaci zwykłych plików tekstowych z rozszerzeniem .ps1. Nie można ich uruchomić podwójnym kliknięciem: należy kliknąć prawym przyciskiem myszy, aby wywołać menu kontekstowe i wybrać opcję „Uruchom w PowerShell”. Z konsoli trzeba albo wskazać pełną ścieżkę do skryptu, albo przejść do odpowiedniego katalogu i wpisać nazwę pliku. Uruchamianie skryptów jest również ograniczone przez politykę systemową, a aby sprawdzić bieżące ustawienia, można użyć polecenia Get-ExecutionPolicy, które zwróci jedną z następujących wartości:
Restricted — uruchamianie skryptów jest zabronione (domyślnie);
AllSigned — zezwala tylko na uruchamianie podpisanych skryptów zaufanego dewelopera;
RemoteSigned — zezwala na uruchamianie podpisanych oraz własnych skryptów;
Unrestricted — zezwala na uruchamianie dowolnych skryptów.
Administrator ma dwa możliwe działania. Najbardziej bezpieczną opcją jest podpisywanie skryptów, ale to dosyć skomplikowany proces — zajmiemy się tym w kolejnych artykułach. Na razie wybierzemy drogę najmniejszego oporu i zmienimy politykę:
Set-ExecutionPolicy RemoteSigned 
PowerShell w tym celu należy uruchomić jako administrator, chociaż za pomocą specjalnego parametru można zmienić politykę także dla bieżącego użytkownika.
Skrypty są pisane w obiektowym języku programowania, którego polecenia są nazywane na tym samym zasadzie, co wcześniej omawiane polecenia: „Działanie-Obiekt” („Czasownik-Rzeczownik”). Jego głównym celem jest automatyzacja zadań administracyjnych, ale to pełnoprawny język interpretowany, w którym znajdują się wszystkie niezbędne konstrukcje: instrukcje warunkowe, pętle, zmienne, tablice, obiekty, obsługa błędów itp. Do pisania skryptów nadaje się dowolny edytor tekstu, ale najwygodniej uruchomić Windows PowerShell ISE.
Do skryptu można przekazywać parametry, czynić je obowiązkowymi oraz definiować wartości domyślne. Ponadto Windows PowerShell umożliwia tworzenie funkcji i wywoływanie ich dokładnie tak samo, jak polecenia: wykorzystuje się do tego konstrukcję Function oraz nawiasy klamrowe. Skrypt z funkcjami nazywany jest modułem i ma rozszerzenie .psm1. Moduły muszą być przechowywane w katalogach zdefiniowanych w zmiennych środowiskowych PowerShell. Można je wyświetlić za pomocą następującego polecenia:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSizeKolektory
W ostatnim przykładzie zastosowaliśmy znaną użytkownikom powłok systemów Unix konstrukcję. W Windows PowerShell pionowa kreska również pozwala przekazać wynik jednej komendy do wejścia innej, jednak w realizacji kolektora istnieje istotna różnica: chodzi tutaj już nie o zbiór znaków czy jakiegoś tekstu. Wbudowane polecenia lub funkcje użytkowników zwracają obiekty lub tablice obiektów i mogą również je przyjmować na wejściu. Jak w powłoce Bourne i jej licznych następcach, w PowerShell dzięki kolektorowi uproszczona jest realizacja skomplikowanych zadań.
Najprostszy przykład kolektora wygląda tak:
Get-Service | Sort-Object -property Status 
Najpierw wykonywane jest polecenie Get-Service, a następnie wszystkie uzyskane usługi są przekazywane do sortowania według właściwości Status polecenia Sort-Object. To, do którego argumentu wynik pracy poprzedniego etapu kolektora jest przekazywany, zależy od jego typu — zazwyczaj jest to InputObject. Temat ten będzie bardziej szczegółowo omawiany w artykule poświęconym językowi programowania PowerShell.
W razie potrzeby można kontynuować łańcuch i przekazać wynik pracy Sort-Object do kolejnego polecenia (będą one wykonywane z lewej do prawej). Przy okazji, użytkownicy Windows mają również dostęp do znanej wszystkim konstrukcji do paginowania:
Get-Service | Sort-Object -property Status | moreUruchamianie zadań w tle
Często zachodzi potrzeba uruchomienia jakiejś komendy w tle, aby nie czekać na wynik jej wykonania w sesji powłoki. W Windows PowerShell istnieje kilka poleceń na tę okoliczność:
Start-Job — uruchomienie zadania w tle;
Stop-Job — zatrzymanie zadania w tle;
Get-Job — przeglądanie listy zadań w tle;
Receive-Job — przeglądanie wyników wykonania zadania w tle;
Remove-Job — usuwanie zadania w tle;
Wait-Job — przywrócenie zadania w tle z powrotem do konsoli.
Aby uruchomić zadanie w tle, używamy polecenia Start-Job, a w nawiasach klamrowych podajemy komendę lub zestaw komend:
Start-Job {Get-Service} 
Zadaniami w tle w Windows PowerShell można zarządzać, znając ich nazwy. Na początek nauczymy się, jak je wyświetlać:
Get-Job 
Teraz pokażemy wynik działania zadania Job1:
Receive-Job Job1 | more 
Wszystko jest dość proste.
Zdalne wykonywanie poleceń
Windows PowerShell pozwala na wykonywanie poleceń i skryptów nie tylko na lokalnym, ale także na zdalnym komputerze, a nawet na całej grupie maszyn. Istnieje kilka sposobów, aby to zrealizować:
- Wiele poleceń cmdlet ma parametr
-ComputerName, ale w ten sposób nie uda się na przykład utworzyć potoku; - Polecenie cmdlet
Enter-PSSessionpozwala utworzyć interaktywną sesję na zdalnej maszynie; - Za pomocą polecenia cmdlet
Invoke-Commandmożna wykonywać polecenia lub skrypty na jednym lub kilku zdalnych komputerach.
Wersje PowerShell
Od pierwszego wydania w 2006 roku PowerShell znacznie się zmienił. Narzędzie jest dostępne dla wielu systemów działających na różnych platformach sprzętowych (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux oraz OS X. Ostatnia wersja 6.2 została wydana 10 stycznia 2018 roku. Skrypty napisane dla wcześniejszych wersji z dużym prawdopodobieństwem będą działać w późniejszych, natomiast wsteczna kompatybilność może sprawiać problemy, ponieważ w miarę rozwoju PowerShell wprowadzono wiele nowych poleceń cmdlet. Aby poznać wersję zainstalowanej na komputerze powłoki, można skorzystać z właściwości PSVersion zmiennej wbudowanej $PSVersionTable:
$PSVersionTable.PSVersion 
Można także skorzystać z polecenia cmdlet:
Get-Variable -Name PSVersionTable –ValueOnly 
To samo można zrobić za pomocą polecenia cmdlet Get-Host. W rzeczywistości jest wiele opcji, ale aby je zastosować, należy poznać język programowania PowerShell, czym zajmiemy się w .
Podsumowanie
Firmie Microsoft udało się stworzyć naprawdę potężną powłokę z wygodnym zintegrowanym środowiskiem do opracowywania skryptów. Od znanych nam narzędzi z świata Unix różni ją głęboka integracja z systemami operacyjnymi rodziny Windows, a także z oprogramowaniem dla nich i platformą .NET Core. PowerShell można nazwać powłoką obiektową, ponieważ polecenia cmdlet i funkcje użytkownika zwracają obiekty lub tablice obiektów i mogą je także przyjmować jako argumenty. Uważamy, że każdy administrator serwerów działających na Windows powinien znać ten instrument: nadszedł czas, aby nie można było obejść się bez wiersza poleceń. Zaawansowana powłoka konsolowa jest szczególnie potrzebna na , ale to już zupełnie inna historia.
Tylko zarejestrowani użytkownicy mogą brać udział w ankiecie. , proszę.
Jakie tematy powinny być poruszone w pierwszej kolejności w kolejnych artykułach cyklu?
53,2%Programowanie w PowerShell123
42,4%Funkcje i moduły PowerShell98
22,1%Jak podpisywać własne skrypty?51
12,1%Praca z repozytoriami przez dostawców (providers)28
57,6%Automatyzacja administracji komputerami za pomocą PowerShell133
30,7%Zarządzanie oprogramowaniem i integrowanie komponentów wykonywalnych PowerShell w zewnętrznych produktach71
Głosowało 231 użytkowników. Wstrzymało się 37 użytkowników.
Źródło: habr.com
