Obecnie PowerShell stanowi dojrzałe środowisko programistyczne, które posiada szerokie spektrum zastosowań. Jest doskonałym narzędziem pracy dla profesjonalistów IT każdej maści. Ale czy zawsze tak było? Czy wiedziałeś, że historia konsoli PowerShell liczy już dwie dekady?
Z początkiem 2002 roku Firma Microsoft rozpoczęła prace nad nowym sposobem zarządzania wierszem poleceń. Zakres prac obejmował również opracowanie całkowicie nowej powłoki, którą początkowo nazwano Monad (czasami spotyka się również roboczą nazwę Microsoft Shell). Nastąpiła publikacja białej księgi, w której zawarto główną koncepcję oraz fundamenty projektu. Monad miał być czymś zupełnie nowym, przełomowym narzędziem, który skupiałby w sobie kwestie programowania, automatyzacji i zarządzania. Miał ułatwić administratorom zarządzanie rozległymi systemami komputerowymi.
Ówczesny szef grupy projektowej zdradził po latach, że główną koncepcją było opracowanie narzędzia podobnego do Unixowego terminala. Jednakże różnice w architekturze systemów powodowały spore problemy. Kolejną przeszkodą był fakt, że w systemach Unixowych wszystko traktowane jest jako kod ASCII, czyli zwykły tekst, w Windowsie natomiast pracuje się na pewnych uporządkowanych strukturach danych. Dlatego też zespół projektowy przyjął całkowicie nowe podejście do sprawy, co przyniosło nieoczekiwane rezultaty.
Tak aktualnie prezentuje się historia konsoli PowerShell.
Pierwsze wersje
W roku 2003 odbył się pierwszy pokaz nowej powłoki Monad w Los Angeles na konferencji Professional Development Conference. Opracowanie pierwszego prototypu rozpoczęto kilka miesięcy po tym wydarzeniu.
W roku 2005 wydano aż 3 beta wersje. W kwietniu tego samego roku nazwę Monad formalnie zmieniono na Windows PowerShell. Natomiast sam projekt stał się ważną częścią oferty technologicznej firmy Microsoft. Oficjalny debiut mogliśmy zaobserwować w 2006 roku. PowerShell dostępny był wówczas w wersji 1.0 dla systemów:
- Windows XP (SP2)
- Windows Server 2003
- Windows Vista
Jednakże, aby korzystać z jego dobrodziejstwa administrator musiał go doinstalować do systemu, gdyż traktowany był jako dodatkowe oprogramowanie. Sam PowerShell posiadał wtedy nieco ponad sto poleceń zwanych w tym przypadku cmdlet (czytaj komandlet). Obecnie żadne aplikacje ani produkty serwerowe nie są zależne od programu Windows PowerShell 1.0.
PowerShell 2.0
Wraz z pojawieniem się wersji 2.0 w roku 2009 konsola stanowi już integralny element systemu operacyjnego Windows. PowerShell 2.0 został zintegrowany z systemami:
- Windows 7
- Windows Server 2008 R2
Możliwość instalacji na:
- Windows XP (SP3)
- Windows Server 2003 (SP2)
- Windows Vista (SP1)
Nowe funkcjonalności:
Windows PowerShell ISE (Integrated Scripting Environment): nowe graficzne środowisko do tworzenia, testowania i debugowania skryptów PowerShell.
Praca zdalna (PowerShell remoting): za pomocą protokołu WS-Management PowerShell 2.0 umożliwia wywoływanie skryptów i cmdletów na komputerze zdalnym lub zestawie komputerów.
Zadania w tle (Background jobs): czasami zwane PSJob, umożliwiają asynchroniczne wywoływanie sekwencji poleceń lub potoku. Zadania można uruchamiać lokalnie lub na wielu komputerach zdalnych.
Funkcje zaawansowane (Advanced functions): są to cmdlety napisane przy użyciu języka skryptowego PowerShell. Początkowo nazywane „cmdletami skryptowymi”, później przemianowane na „funkcje zaawansowane”.
Moduły: pakiety umożliwiające organizowanie i partycjonowanie komponentów PowerShella w jednostkach wielokrotnego użytku. Kod z modułu jest wykonywany we własnym, samodzielnym kontekście i nie wpływa na stan poza modułem.
Debugowanie skryptów: pozwala na ustawienie punktów przerwania w skrypcie lub funkcji PowerShell. Punkty przerwania można ustawić na liniach, kolumnach, poleceniach oraz dostępie do odczytu lub zapisu zmiennych. Dodano również zestaw cmdletów do kontrolowania punktów przerwania za pomocą skryptu.
Obecnie firma Microsoft zaleca zaprzestanie używania PowerShell v2.
PowerShell 3.0
Kolejna odsłona konsoli Windows PowerShell miała miejsce dopiero 3 lata później w 2012 roku. PowerShell 3.0 jest częścią większego pakietu Windows Management Framework 3.0 (WMF3), który zawiera usługę WinRM do obsługi komunikacji zdalnej. Domyślnie zintegrowano go z następującymi systemami:
- Windows 8
- Windows Server 2012
Możliwość instalacji na systemach:
- Windows 7 (SP1)
- Windows Server 2008 (SP1)
- Windows Server 2008 R2 (SP1)
Nowe funkcjonalności:
Zaplanowane zadania (Scheduled jobs): od teraz zadania można zaplanować, aby były uruchamiane o określonej godzinie i dacie, wykorzystując przy tym Harmonogram Zadań systemu Windows.
Poprawiono sesje: sesje zdalne stały się bardziej odporne na tymczasowe awarie sieci, można je również rozłączyć i połączyć ponownie.
Ułatwienie pisania kodu: dodano funkcję autouzupełniania kodu (IntelliSense) i możliwość wykorzystania zdefiniowanych fragmentów kodu (Snippets). PowerShell ISE umożliwia użytkownikom używanie okien dialogowych do wypełniania parametrów cmdletów.
Aktualizacja pomocy: pliki pomocy można aktualizować online za pomocą cmdletu Update-Help.
Automatyczne wykrywanie modułu: moduły są importowanie automatyczne przy wywołaniu cmdletu. Uzupełnianie kodu działa również dla niezaimportowanych modułów.
Nowe cmdlety: odpowiedzialne m.in.: za zarządzanie dyskami, drukarkami, obsługę firewalla i połączeń sieciowych.
PowerShell 4.0
Na kolejną wersję nie trzeba było długo czekać. Już rok później firma Microsoft oficjalnie zaprezentowała wersję 4.0, która swym działaniem domyślnie objęła systemy:
- Windows 8.1
- Windows Server 2012 R2
Możliwość instalacji na systemach:
- Windows 7 SP1
- Windows Server 2008 R2 (SP1)
- Windows Server 2012
Nowe funkcjonalności:
Konfiguracja żądanego stanu (Desired State Configuration): umożliwia wdrażanie oprogramowania i usług oraz zarządzanie nimi w celu zapewniania spójnej konfiguracji danych na wszystkich komputerach i urządzeniach. Korzysta ze standardów zarządzania DMTF i protokołu WS-Management.
Nowa domyślna polityka wykonywania skryptów: na serwerach Windows domyślną zasadą wykonywania jest teraz RemoteSigned.
Cmdlet Save-Help: pliki pomocy można teraz zapisać dla modułów zainstalowanych na zdalnych komputerach.
Poprawiono debugowanie: debuger obsługuje teraz przepływy pracy, zdalne wykonywanie skryptów i zachowywanie sesji w ramach ponownych połączeń programu PowerShell.
Zmienna PipelineVariable: nowy parametr, który udostępnia bieżący obiekt potoku jako zmienną do celów programistycznych.
Diagnostyka sieci: cmdlety do zarządzania fizycznymi i zwirtualizowanymi przełącznikami sieciowymi Hyper-V.
Cmdlety Where i ForEach: jako nowa alternatywna metoda filtrowania i iterowania po obiektach.
PowerShell 5.0
Kolejna piąta wersja wydana w lutym 2016 roku, domyślnie zintegrowana z systemami:
- Windowsa 10 (do build 1511)
- Windows Server 2016 Technical Preview
Nowe funkcjonalności:
Nowe słowa kluczowe class i enum: które tworzą klasy do programowania obiektowego i wyliczenia.
Ulepszenie zarządzania przełącznikami: rozszerzenie obsługi zarządzania na przełączniki sieciowe warstwy 2.
Poprawiono debugowanie zadań: możliwość debugowania zadań w tle i wystąpień PowerShell hostowanych w innych procesach.
Kolorowanie składni: dodano kolorowanie składni jak w narzędziach deweloperskich.
Nowe moduły: wprowadzono nowe modułu do kompresowania danych i instalacji pakietów oprogramowania
Ulepszenie funkcji DSC: wprowadzono Local Configuration Manager (LCM) w wersji 2.0, metakonfiguracje DSC Local Configuration Manager, a także tworzenie zasobów DSC z wykorzystaniem klas PowerShell.
PowerShell 5.1
Rok później wprowadzono aktualizację do wersji 5.1, która domyślnie dołączona jest do systemów:
- Windows 10 (od build 1607)
- Windows 11
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
Możliwość instalacji w systemach:
- Windows 7 (SP1)
- Windows 8
- Windows Server 2008 R2 (SP1)
- Windows Server 2012
- Windows Server 2012 R2
Nowe funkcjonalności:
Nowe cmdlety: dodano cmdlety odpowiedzialne za obsługę stref czasowych.
Ulepszenie PackageManagement: możliwość obsługi serwera proxy.
Moduł LocalAccounts: umożliwia dodawanie i usuwanie lokalnych kont użytkowników.
PowerShell 5.1 jest pierwszą wersją, która pojawiła się w dwóch edycjach „Desktop” i „Core”. Edycja „Desktop” jest kontynuacją tradycyjnego programu Windows PowerShell, który działa w oparciu o stos .NET Framework. Edycja „Core” z kolei działa na platformie .NET Core i jest dołączona do systemu Windows Server 2016 Nano Server. W związku z ograniczonym miejscem została okrojona z części funkcji.
Więcej o zmianach w konkretnych wersjach dowiesz się z artykułu Co nowego w programie Windows PowerShell.
Poniższa tabela przedstawia zestawienie możliwości instalacji konkretnej wersji konsoli PowerShell na danym systemie operacyjnym. Aby lepiej zobrazować całość, przedstawiłem również historyczne systemy jak Windows XP czy Vista, które raczej nie często można spotkać w pracy.
Zwróć jednak uwagę, że praktycznie od wersji Windows Server 2008 R2 istnieje możliwość aktualizacji PowerShella do wersji 5.1 co jest dosyć rozsądnym rozwiązaniem patrząc z perspektywy nie tylko wydajności ale również bezpieczeństwa.
PowerShell Core 6
Olbrzymi sukces, jaki odniosła konsola Windows PowerShell, nie został bez echa. Firma Microsoft postanowiła pójść za ciosem i w 2016 zdecydowała się na udostępnienie kodu PowerShella. Od tej chwili teoretycznie stał on się produktem open source. Rozwiązanie to umożliwiło przeniesienie narzędzia PowerShell na inne platformy, co dało początek zupełnie nowej międzyplatformowej wersji, nazwanej PowerShell Core. Mimo iż jest to stosunkowo nowy projekt, to występuje już w kilku wersjach.
W sierpniu 2016 Microsoft zaprezentował PowerShell Core, który ogólną dostępność dla systemów Windows, macOS i Linux osiągnął w styczniu 2018. Narzędzie posiada własną pomoc techniczną i jest zgodne z zasadami cyklu życia firmy Microsoft. Aktualizacje planowane są co pół roku.
Najważniejszą zmianą w tej wersji PowerShell jest rozszerzenie na inne systemy operacyjne. Dla administratorów systemu Windows ta wersja programu PowerShell nie zawiera żadnych nowości. W wywiadzie ze społecznością w styczniu 2018 zespół PowerShell został poproszony o wymienienie 10 najbardziej ekscytujących rzeczy, dla administratora Windows, który zdecyduje się na migrację z Windows PowerShell 5.1 do PowerShell Core 6.0. W odpowiedzi wymieniono tylko dwie: wieloplatformowość i open-source. Jeżeli zatem nie ma konkretnego powodu raczej nie rekomenduję migracji.
PowerShell Core 6 doczekał się dwóch aktualizacji do wersji 6.1 i 6.2, które koncentrują się głównie na ulepszeniach wydajności, poprawkach błędów oraz mniejszych usprawnieniach cmdletów w celu poprawy produktywności.
PowerShell 7
W 2020 roku zadebiutowała wersja 7.0, która w listopadzie tego samego roku otrzymała aktualizację do wersji 7.1. PowerShell 7 zastępuje produkty PowerShell Core 6.x, a także Windows PowerShell 5.1. Podczas prac rozwojowych skupiono się na tym, aby siódma odsłona była realnym zamiennikiem Windows PowerShell. Miała być maksymalnie zbliżona pod względem kompatybilności z modułami dostarczanymi dla systemu Windows. Pozbyto się również słowa „Core” z nazwy.
Nowe funkcje obejmują:
Przełącznik -Parallel dla cmdletu ForEach-Object: ułatwiający obsługę przetwarzania równoległego
Nowy widok błędu
Cmdlet Get-Error
Operatory tworzenia łańcuchów potoków (&& i ||): umożliwiają warunkowe wykonanie następnego polecenia cmdlet w potoku.
Zestaw nowych operatorów przypisania: ?: dla operacji trójskładnikowych, ??=, który przypisuje wartość do zmiennej tylko wtedy, gdy istniejąca wartość zmiennej jest równa null. Operator ?? dla koalescencji zerowej.
Eksperymentalne wieloplatformowe wywołanie DscResource
Powrót cmdletu Out-GridView
Powrót przełącznika -ShowWindow dla cmdletu Get-Help
Aktualnie najnowszą wersją jest 7.2 wydana w roku 2021 wraz z .NET 6.0. PowerShell Core 7.2 dostępny jest dla systemów Linux, Windows, MacOS, a także dla kontenera Docker.
Nowe funkcje obejmują:
Uniwersalne pakiety instalacyjne dla systemu Linux
Wsparcie dla Windows Microsoft Update
Ulepszone uzupełnianie kart
Moduł PSReadLine 2.1 z predykcyjną IntelliSense
Czy PowerShell 7 zastąpi PowerShell?
Młodzi adepci PowerShella często zadają pytanie „Czy warto poznawać PowerShella 5.1, nie lepiej od razu przejść na PowerShell 7?”. Odpowiedź na to pytanie zależy w zasadzie od środowiska, na którym pracujesz. Jeżeli korzystasz tylko i wyłącznie z systemu Windows to PowerShell 5.1 może okazać się lepszym wyborem. W przypadku innych platform systemowych jedynym wyborem będzie PowerShell 7. Dodatkowo zwróć również uwagę na trzy poniższe aspekty.
Po pierwsze dostępność. Konsola PowerShell w wersji 5.1 jest dostępna od ręki na każdym sprzęcie komputerowym z systemem Windows. Nie ma zatem potrzeby instalować i konfigurować dodatkowych komponentów, możesz od razu przejść do działania. Co moim zdaniem jest pomocne szczególnie dla osób, które są na początku swojej przygody z IT.
Po drugie PowerShell 7 nie zastąpi PowerShella (a przynajmniej na razie). Powstanie kilku nowszych wersji nie oznacza, że PowerShell w wersji 5.1 odchodzi w zapomnienie. Wręcz przeciwnie na chwilę obecną firma Microsoft nie może z niego zrezygnować, ponieważ dla systemu Windows to PowerShell 5.1 jest bardziej wydajny. Co prawda nie będzie już rozwijany, przewiduje się jedynie dostarczanie poprawek błędów i aktualizacji zabezpieczeń, aby utworzyć bardzo stabilną i niezawodną platformą, która nie będzie już znacząco modyfikowana.
Po trzecie, fundamenty pracy na obu konsolach są bardzo zbliżone. Po opanowaniu podstaw PowerShella jeżeli ktoś będzie potrzebował, to bez trudu przesiądzie się na PowerShell Core.
Więcej na temat PowerShell Core oraz różnić między wersjami znajdziesz w artykule Różnice między programami Windows PowerShell 5.1 i PowerShell 7.x.
Podsumowanie
Sam widzisz, że konsola PowerShell ma już za sobą całkiem niezłą historię. Od prostego wiersza poleceń po zaawansowane międzyplatformowe środowisko skryptowe. A coś mi mówi, że to jeszcze nie koniec.
Jeżeli nie miałeś okazji jeszcze zapoznać się z konsolą PowerShell to koniecznie dołącz do mini szkolenia PowerShell.
Może masz doświadczenie z różnymi wersjami konoslii PowerShell? Koniecznie daj znać w komentarzach.
Jeżeli natomiast wpis Ci się podobał, nie zapomnij się nim podzielić