PowerShell od lat jest podstawowym narzędziem dla administratorów systemów Windows, umożliwiając zarządzanie systemami, automatyzację zadań oraz pracę z usługami chmury publicznej. Jego możliwości sprawiły, że stał się nieodzownym elementem we współczesnych środowiskach IT. Jednak przez długi czas był ściśle związany tylko i wyłącznie z systemem Windows i jego ekosystemem. Ograniczenie to powodowało trudności w środowiskach wieloplatformowych, gdzie administratorzy musieli korzystać z kilku narzędzi do zarządzania różnymi systemami.

 

W 2016 roku Microsoft dokonał znaczącej zmiany, tworząc z PowerShella narzędzie open-sourcowe i przenosząc na nowy framework .NET Core. Od tego momentu PowerShell stał się rozwiązaniem wieloplatformowym, dostępnym również dla systemów Linux czy macOS. Nowa wersja to nie tylko rozszerzona kompatybilność, ale także lepsza wydajność, nowoczesne funkcje i większa elastyczność. Obecna siódma już odsłona PowerShella to krok w stronę ujednolicenia zarządzania infrastrukturą IT, pozwalający administratorom korzystać z jednego narzędzia do kontroli nad całym ekosystemem – niezależnie od platformy systemowej.

 

Mimo tych zalet wielu administratorów wciąż nie może się zdecydować na przesiadkę do PowerShella 7, co może prowadzić do nieefektywnego zarządzania infrastrukturą. Aby tego uniknąć, warto poznać koncepcję środowisk wieloplatformowych i dowiedzieć się, jak PowerShell 7 może ułatwić ich obsługę.

 

Nowa rzeczywistość w IT

 

Współczesne firmy coraz rzadziej opierają się na jednym systemie operacyjnym. Czasy, gdy cała infrastruktura IT działała wyłącznie na Windows Server, dawno minęły. Dziś organizacje korzystają z szerokiej gamy technologii, dostosowując wybór systemów operacyjnych do swoich potrzeb.

 

Globalizacja i rozwój chmury obliczeniowej sprawiły, że coraz więcej firm operuje na rozproszonych środowiskach, gdzie serwery, aplikacje i usługi działają na wielu platformach jednocześnie. Jest to świadoma strategia, pozwalająca organizacjom osiągnąć większą elastyczność, wydajność i bezpieczeństwo. Poniżej przedstawię kilka kluczowych powodów, dla których warto postawić na cross-platformowe środowiska:

 

Elastyczność i łatwa adaptacja

 

Każdy dział firmy może mieć inne potrzeby technologiczne. Wieloplatformowość pozwala na ich dostosowanie i szybsze wdrażanie nowych technologii bez gruntownej przebudowy systemów.

 

Optymalizacja kosztów i zasobów

 

Łączenie systemów open-source z komercyjnymi oraz dobór odpowiednich technologii do konkretnych zadań pozwala znacząco obniżyć koszty licencji, sprzętu i utrzymania infrastruktury.

 

Najlepsze narzędzia do konkretnych zadań

 

Nie ma jednej idealnej platformy. Przykładowo Windows sprawdza się w aplikacjach biznesowych, a Linux dominuje na serwerach. Hybrydowe podejście pozwala wykorzystać mocne strony obu systemów.

 

Unikanie vendor lock-in

 

Dywersyfikacja technologii zwiększa niezależność organizacji, poprawia pozycję negocjacyjną z dostawcami i minimalizuje ryzyko problemów wynikających z monopolu jednego dostawcy.

 

Większa konkurencyjność

 

Dostęp do różnych technologii pozwala szybciej reagować na zmiany rynkowe, wdrażać innowacje i lepiej dostosowywać się do wymagań klientów.

 

Większe bezpieczeństwo

 

Rozproszenie infrastruktury w oparciu o różne platformy zmniejsza ryzyko awarii i cyberataków. Wiele warstw zabezpieczeń sprawia, że atakujący muszą pokonać różne mechanizmy ochronne.

 

Jedno narzędzie, by panować nad wszystkim

 

Wiesz już jakie powody przyświecają tworzeniu środowisk wieloplatformowych, jednakże wiele systemów operacyjnych oznacza większą złożoność w zarządzaniu. Każda platforma ma swoje natywne narzędzia, własną składnię poleceń, odrębne systemy plików czy specyficzne metody automatyzacji. Administratorzy muszą więc opanować wiele różnych technologii, co zwiększa koszty szkolenia i utrzymania infrastruktury. Częściowym rozwiązaniem tego problemu może być wykorzystanie PowerShella 7, który zapewnia spójne narzędzie do zarządzania systemami Windows, Linux i macOS. Dzięki niemu możesz używać tych samych skryptów i poleceń niezależnie od systemu operacyjnego, co znacząco upraszcza pracę i poprawia efektywność administracji IT.

 

Jednym z największych atutów PowerShell 7 jest to, że zapewnia jednolity interfejs dla administratorów systemów Windows, Linux i macOS. Zamiast przełączać się między PowerShellem na Windowsie, Bashem na Linuxie czy Zsh na macOS, możesz używać tego samego narzędzia do zarządzania całą infrastrukturą. Przykładowo, jeśli chcesz zobaczyć listę uruchomionych procesów na różnych systemach możesz po prostu wykonać polecenie:

 

Get-Process

Na Windowsie polecenie wyświetli pełną listę uruchomionych procesów:

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName

13     4,64       4,51       0,00    9692   0 AggregatorHost

15    22,71       1,09       1,08    4280   1 ai

11     1,82       0,30      29,19    7648   1 ApMsgFwd

 9     1,21       0,23       1,11    7392   1 ApntEx

17     3,54       0,56      84,34    6996   1 Apoint

24    15,23       4,08      26,98    6668   1 ApplicationFrame

6      0,84       0,05       0,55   10076   1 ApRemote

32    13,12       0,04       0,53    8976   1 backgroundTaskHost

15     1,98       0,73       0,34   13236   1 BrCcUxSys

17     2,27       0,11       0,59   15292   1 BrCtrlCntr

 

Na Linuxie zwróci procesy w sposób zbliżony do ps aux:

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName

 0     0.00       3.60       0.00    1598 …95 (sd-pam)

 0     0.00       7.58       0.12     710 710 accounts-daemon

 0     0.00       2.30       0.00     681 681 anacron

 0     0.00       8.12       0.00    1822 …22 at-spi-bus-launcher

 0     0.00       7.65       0.01    1965 …22 at-spi2-registryd

 0     0.00       1.22       0.00     751 683 avahi-daemon: chroot helper

 0     0.00       4.92       0.00    2670 …70 bash

 0     0.00       5.02       0.02    2938 …38 bash

 0     0.00      13.90       0.12    1231 …31 colord

 0     0.00       0.00       0.00      22   0 cpuhp/0

 

Na macOS działa podobnie jak na Linuxie:

  NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName

       0     0,00       0,00       0,00     619 619 accessoryupdaterd

       0     0,00       6,07       0,50     420   1 accountsd

       0     0,00       0,00       0,00     393 393 AccountSubscriber

       0     0,00       9,48       0,22     904   1 AddressBookSourceSync

       0     0,00       0,00       0,00     572 572 adid

       0     0,00       9,92       0,39     843   1 adprivacyd

       0     0,00       8,80       0,16     609   1 AirPlayUIAgent

       0     0,00       0,00       0,00     151 151 AirPlayXPCHelper

       0     0,00       0,00       0,00     199 199 airportd

       0     0,00       7,48       0,33     569   1 akd

 

W identyczny sposób możesz sprawdzić procesy na zdalnych maszynach niezależnie od ich systemu operacyjnego. Dzięki temu nie musisz przełączać się między różnymi konsolami czy uczyć się innych składni – jedno polecenie działa na każdym systemie.

 

Spróbujmy teraz czegoś nieco trudniejszego. Załóżmy, że jesteś administratorem IT i masz do zarządzania serwery Windows, Linux oraz kilka komputerów Mac. Chcesz sprawdzić ostatnie kilka wpisów w dzienniku zdarzeń. Zadanie wydawałoby się trywialne, ale ze względu na złożony charakter środowiska może zająć nieco Twojego cennego czasu. Korzystając z PowerShella 7 możesz to zrobić za pomocą jednego prostego skryptu:

 

   if ($IsWindows) {

         # Windows: Pobiera ostatnie 10 zdarzeń z dziennika "System"

        Get-WinEvent -LogName System -MaxEvent 10 | Select-Object TimeCreated, Id, LevelDisplayName, Message

       

    } elseif ($IsLinux) {

        # Linux: Pobiera ostanie 10 wpisów z pliku /var/log/syslog

        tail -n 10 /var/log/syslog

   

    } elseif ($IsMacOS) {

        # macOS: Pobiera ostanie 10 wpisów z dziennika zdarzeń

        log show --style syslog | tail -n 10

    }

 

Wywołanie skryptu na platformie Windows:

TimeCreated           Id LevelDisplayName Message

05.03.2025 14:21:55    1 Informacje       Czas systemowy został zmieniony na ‎2025‎-‎03‎-‎05T13:21:54.505000000Z z ‎2025‎-‎03‎-‎05T13:21:44.005052400Z.…

05.03.2025 14:21:54   24 Informacje       Informacje dotyczące strefy czasowej zostały z odświeżone. Przyczyna zakończenia: 0. Aktualna różnica stref czasowy…

05.03.2025 14:11:14  566 Informacje       Sesja systemowa została przeniesiona z 4 do 6.…

05.03.2025 14:11:14  105 Informacje       Zmiana źródła zasilania.

05.03.2025 13:55:37 8265 Ostrzeżenia      Aggregated Threat assessment of current system instance

05.03.2025 13:52:46   16 Informacje       Historia dostępu do gałęzi \\??\\C:\\ProgramData\\Microsoft\\Provisioning\\Microsoft-Desktop-Provisioning-Sequence.dat zo…

05.03.2025 13:51:20  566 Informacje       Sesja systemowa została przeniesiona z 3 do 4.…

05.03.2025 13:50:15 7040 Informacje       Typ uruchamiania usługi Usługa inteligentnego transferu w tle został zmieniony z autostart na uruchamianie na żądan…

05.03.2025 13:48:56   16 Informacje       Historia dostępu do gałęzi \\??\\C:\\Users\\Admin\\AppData\\Local\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1…

05.03.2025 13:48:09   16 Informacje       Historia dostępu do gałęzi \\??\\C:\\Users\\Admin\\AppData\\Local\\Packages\\Microsoft.WindowsTerminal_8wekyb3d8bbwe\\System…

 

W przypadku systemu Linux wynik wyglądał będzie następująco:

2025-03-05T14:20:07.690532+01:00 adam-Virtual-Machine systemd[1]: Starting sysstat-collect.service - system activity accounting tool...

2025-03-05T14:20:07.702576+01:00 adam-Virtual-Machine systemd[1]: sysstat-collect.service: Deactivated successfully.

2025-03-05T14:20:07.702858+01:00 adam-Virtual-Machine systemd[1]: Finished sysstat-collect.service - system activity accounting tool.

2025-03-05T14:21:43.446018+01:00 adam-Virtual-Machine kernel: hv_utils: TimeSync IC version 4.0

2025-03-05T14:21:54.158784+01:00 adam-Virtual-Machine systemd-resolved[580]: Clock change detected. Flushing caches.

2025-03-05T14:21:54.199644+01:00 adam-Virtual-Machine systemd[1]: Starting fwupd-refresh.service - Refresh fwupd metadata and update motd...

2025-03-05T14:21:55.025268+01:00 adam-Virtual-Machine systemd[1]: man-db.service - Daily man-db regeneration was skipped because of an unmet condition check (ConditionACPower=true).

2025-03-05T14:21:57.792087+01:00 adam-Virtual-Machine systemd[1]: fwupd-refresh.service: Deactivated successfully.

2025-03-05T14:21:57.792321+01:00 adam-Virtual-Machine systemd[1]: Finished fwupd-refresh.service - Refresh fwupd metadata and update motd.

2025-03-05T14:25:02.017047+01:00 adam-Virtual-Machine CRON[4197]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

 

Natomiast z komputera z systemem macOS otrzymasz:

2025-03-05 09:06:49.949139-0800  localhost corespotlightd[506]: (SpotlightIndex) [com.apple.spotlightindex:Query] Starting query execution for qid=(324,382), protectionClass=0, userQueryLength=0

2025-03-05 09:06:49.949366-0800  localhost corespotlightd[506]: (SpotlightIndex) [com.apple.spotlightindex:Query] Starting query execution for qid=(324,382), protectionClass=0, userQueryLength=0

2025-03-05 09:06:49.954181-0800  localhost corespotlightd[506]: (SpotlightIndex) [com.apple.spotlightindex:Query]

2025-03-05 09:06:49.960692-0800  localhost spotlightknowledged[1433]: (CoreSpotlight) [com.apple.corespotlight:query] qid=324 - Found: 1 items

2025-03-05 09:06:49.985078-0800  localhost spotlightknowledged[1433]: (CoreSpotlight) [com.apple.corespotlight:query] qid=324 - Found: 26 items

2025-03-05 09:06:50.006665-0800  localhost corespotlightd[506]: (SpotlightIndex) [com.apple.spotlightindex:Query]

2025-03-05 09:06:50.009372-0800  localhost spotlightknowledged[1433]: (CoreSpotlight) [com.apple.corespotlight:query] qid=324 - Found: 6 items

2025-03-05 09:06:50.009707-0800  localhost spotlightknowledged[1433]: (CoreSpotlight) [com.apple.corespotlight:query] qid=324 - Finished

2025-03-05 09:06:50.009909-0800  localhost spotlightknowledged[1433]: (CoreSpotlight) Created Activity ID: 0x1349a, Description: index-items

2025-03-05 09:06:50.019544-0800  localhost spotlightknowledged[1433]: (CoreSpotlight) Created Activity ID: 0x1349b, Description: index-items

 

Jak zatem widzisz, dzięki PowerShell 7 możesz tworzyć skrypty działające niezależnie od systemu, co eliminuje potrzebę używania różnych narzędzi administracyjnych i w rezultacie skraca czas wykonywania rutynowych zadań.

 

Czy PowerShell 7 to rozwiązanie idealne?

 

Oczywiście, że nie. Niestety nadal możesz spotkać się z sytuacjami, w których natywne narzędzia systemowe będą lepszym wyborem i dostarczą bardziej szczegółowych danych.

 

Dodatkowo warto nadmienić, że:

Niektóre natywne polecenia systemowe nie mają bezpośrednich odpowiedników w PowerShellu.

Moduły PowerShella nie zawsze działają identycznie na różnych platformach.

W niektórych przypadkach skrypty trzeba dostosowywać do konkretnego systemu operacyjnego.

 

Mimo tych ograniczeń PowerShell 7 daje administratorom jedno spójne narzędzie do zarządzania systemami Windows, Linux i macOS, co znacząco upraszcza pracę. Moim zdaniem warto poświęcić czas aby przyjrzeć się temu narzędziu bliżej. Jeżeli myślisz podobnie i chciałbyś poznać PowerShella 7 nieco bliżej mam coś specjalnie dla Ciebie.

 

PowerShell 7. Kurs video. Wieloplatformowa administracja systemami.

 

Co zyskasz dołączając do szkolenia?

  • Zrozumienie, jak działa PowerShell 7 na różnych systemach operacyjnych.
  • Praktyczne przykłady i ćwiczenia, które możesz wykorzystać w realnych scenariuszach.
  • Wprowadzenie do tworzenia funkcji wieloplatformowych.
  • Podstawy bezpiecznej pracy z PowerShellem.

 

Nie czekaj, zacznij już dziś i zyskaj przewagę!