PowerShell w Windows - podstawy i automatyzacja

Przemysław Kwiatkowski 7 sierpnia 2026
Wiersz poleceń Windows PowerShell wyświetla listę usług sieciowych, niektóre zatrzymane, inne działające.

Spis treści

Gdy trzeba szybko sprawdzić procesy, uruchomić aplikację, zmienić setki plików albo zautomatyzować konfigurację komputera, klikanie kolejnych okien przestaje być wygodne. Windows PowerShell łączy terminal z językiem skryptowym, dlatego pozwala wykonywać pojedyncze polecenia i budować powtarzalne automatyzacje dla systemu oraz aplikacji desktopowych. Pokażę, czym różni się od wiersza poleceń, jak wybrać wersję 5.1 lub 7, od czego zacząć i jak unikać typowych błędów.

Najważniejsze informacje o PowerShellu w Windows

  • PowerShell to zarówno terminal, jak i język skryptowy oparty na obiektach .NET.
  • Windows PowerShell 5.1 jest elementem systemu, natomiast PowerShell 7 instaluje się osobno i działa równolegle.
  • Do instalacji nowszej wersji na komputerze klienckim najwygodniej użyć polecenia winget.
  • Największą przewagę daje potok obiektów, który pozwala przekazywać wyniki jednego polecenia do następnego bez żmudnego parsowania tekstu.
  • Execution Policy ogranicza przypadkowe uruchamianie skryptów, ale nie jest pełnym zabezpieczeniem przed złośliwym kodem.

Widok konsoli Windows PowerShell z listą poleceń, w tym

Czym jest PowerShell i do czego służy w Windows

PowerShell jest powłoką wiersza poleceń oraz językiem skryptowym przeznaczonym przede wszystkim do administracji systemem i automatyzacji. Microsoft opisuje Windows PowerShell jako narzędzie stworzone do zarządzania systemem Windows i aplikacjami, ale w praktyce jego zastosowanie jest szersze. Można nim obsługiwać pliki, procesy, usługi, rejestr, sieć, zadania harmonogramu, a także narzędzia deweloperskie i usługi Azure.

Najważniejsza różnica względem cmd.exe polega na tym, że PowerShell pracuje na obiektach, a nie wyłącznie na tekście. Wynik polecenia może zawierać nazwę procesu, jego identyfikator, zużycie pamięci i inne właściwości, które da się filtrować lub sortować bez pisania skomplikowanych wyrażeń tekstowych.

Get-Process | Sort-Object CPU -Descending | Select-Object -First 10

Ten przykład pobiera procesy, sortuje je według czasu procesora i pokazuje dziesięć pierwszych wyników. Właśnie takie podejście robi największą różnicę w codziennej pracy. Zamiast otwierać Menedżera zadań, szukać odpowiedniej kolumny i ręcznie analizować dane, otrzymuję powtarzalne polecenie, które mogę później wykorzystać w skrypcie.

PowerShell a wiersz poleceń

Wiersz poleceń nadal przydaje się do prostych operacji i zgodności ze starszymi skryptami batch. PowerShell lepiej sprawdza się wtedy, gdy zadanie ma kilka warunków, wymaga pracy na właściwościach obiektów albo ma być uruchamiane regularnie.

Obszar cmd.exe PowerShell
Proste polecenia systemowe Szybki i wystarczający Również obsługuje takie zadania
Praca z procesami i usługami Zwykle wymaga dodatkowego parsowania Gotowe obiekty i polecenia
Automatyzacja Skrypty .bat i .cmd Skrypty .ps1, funkcje, moduły i obsługa błędów
Przenośność Głównie środowisko Windows PowerShell 7 działa również na Linuxie i macOS

Nie oznacza to, że każde zadanie trzeba przepisywać do PowerShella. Jeżeli istniejący skrypt batch działa stabilnie, migracja tylko dla samej technologii nie ma sensu. Przy nowym projekcie wybrałbym jednak PowerShell, szczególnie gdy skrypt ma być rozwijany przez kilka miesięcy.

Jak uruchomić PowerShell i wybrać odpowiednią wersję

W Windows 10 i Windows 11 znajdziesz klasyczny Windows PowerShell 5.1. Możesz uruchomić go z menu Start albo poleceniem powershell.exe. Nowsza linia, czyli PowerShell 7, korzysta z polecenia pwsh.exe i nie zastępuje automatycznie starszej wersji.

To rozdzielenie często zaskakuje początkujących. Po instalacji PowerShell 7 możesz nadal otworzyć starą aplikację Windows PowerShell, ponieważ obie wersje są instalowane obok siebie. Microsoft Learn podkreśla, że część starszych modułów Windows działa wyłącznie w wersji 5.1, choć niektóre można uruchamiać w PowerShellu 7 dzięki warstwie zgodności.

Instalacja PowerShell 7 przez winget

Na typowym komputerze z Windows 11 najprościej użyć Menedżera pakietów Windows. Otwórz Terminal lub PowerShell i wykonaj:

winget install --id Microsoft.PowerShell --source winget

Po instalacji uruchom nową wersję poleceniem:

pwsh

Jeżeli winget nie jest dostępny, można użyć instalatora MSI albo pakietu MSIX. W środowiskach firmowych instalator MSI bywa praktyczniejszy, ponieważ łatwiej wdrożyć go centralnie i kontrolować ustawienia aktualizacji. Dokumentacja Microsoftu wskazuje też na instalację ZIP, która przydaje się na Windows Server Core, urządzeniach ARM lub wtedy, gdy potrzebujesz kilku wersji obok siebie.

PowerShell 5.1 czy PowerShell 7

Potrzeba Lepszy wybór Dlaczego
Obsługa starszych modułów Windows 5.1 Największa zgodność z elementami systemu i starszym oprogramowaniem
Nowe skrypty i narzędzia .NET 7 Nowocześniejsze środowisko i dalszy rozwój
Praca na Windows, Linuxie i macOS 7 Wersja wieloplatformowa
Stary skrypt administracyjny Najpierw wersja, dla której został napisany Zmniejszasz ryzyko problemów z modułami

Moja praktyczna rada jest prosta. Do nauki i nowych automatyzacji instaluję PowerShell 7, ale nie usuwam wersji 5.1. Dzięki temu mogę korzystać z nowego środowiska bez ryzyka, że starszy skrypt administracyjny przestanie działać.

Podstawowe polecenia i potok obiektów

PowerShell ma dużą liczbę poleceń nazywanych cmdletami. Ich nazwy zwykle składają się z czasownika i rzeczownika, na przykład Get-Process, Stop-Service albo Get-ChildItem. Taki schemat ułatwia zapamiętywanie poleceń, bo nazwa od razu sugeruje, czy coś pobieramy, ustawiamy, uruchamiamy czy usuwamy.

Get-Command *-Service
Get-Help Get-Process -Examples
Get-Process | Get-Member

Get-Command wyszukuje dostępne polecenia, Get-Help pokazuje dokumentację, a Get-Member ujawnia właściwości i metody obiektów. Ten ostatni cmdlet jest szczególnie pomocny, gdy wiem, jaki wynik otrzymuję, ale nie pamiętam nazwy konkretnego pola.

Polecenia, które przydają się od pierwszego dnia

  • Get-ChildItem przegląda pliki i katalogi. W wielu sytuacjach działa podobnie do dir lub ls.
  • Set-Location zmienia bieżący katalog, a skrót cd pozostaje dostępny.
  • Get-Process pokazuje uruchomione procesy.
  • Get-Service pozwala sprawdzić stan usług systemowych.
  • Get-ComputerInfo zwraca informacje o komputerze i systemie.
  • Get-WinEvent odczytuje zdarzenia z dzienników systemowych.

Największy potencjał pojawia się przy znaku |, czyli potoku. Przekazuje on wynik jednego polecenia do następnego. Nie przesyła zwykłego tekstu, tylko obiekty, dlatego mogę filtrować dane po właściwościach.

Get-Service |
    Where-Object Status -eq 'Running' |
    Sort-Object DisplayName

Ten fragment wybiera uruchomione usługi i sortuje je po nazwie wyświetlanej. W praktyce podobny schemat pojawia się bardzo często: pobierz dane, odfiltruj je, posortuj, wybierz potrzebne właściwości i zapisz wynik.

Get-Process |
    Where-Object CPU -gt 100 |
    Select-Object Name, Id, CPU

Nie zaczynałbym nauki od zapamiętywania setek cmdletów. Znacznie szybciej działa opanowanie kilku czasowników, potoku oraz poleceń Get-Help i Get-Command. Resztę można odkrywać w trakcie rozwiązywania konkretnego problemu.

Automatyzacja aplikacji desktopowych i codziennych zadań

W środowisku Windows PowerShell jest najbardziej użyteczny wtedy, gdy eliminuje powtarzalne klikanie. Możesz uruchamiać programy, zamykać zawieszone procesy, przygotowywać katalogi robocze, analizować logi, zmieniać nazwy plików i instalować aplikacje za pomocą winget.

Uruchamianie i kontrolowanie programu

Start-Process notepad.exe

Do uruchamiania aplikacji służy Start-Process. Możesz przekazać argumenty, wskazać katalog roboczy albo poczekać na zakończenie programu.

Start-Process "C:\Program Files\7-Zip\7zFM.exe" -Wait

Jeżeli aplikacja przestanie odpowiadać, najpierw sprawdź jej proces, a dopiero potem go zatrzymaj:

Get-Process -Name notepad
Stop-Process -Name notepad -WhatIf

Parametr -WhatIf jest świetnym nawykiem. Pokazuje, co stałoby się po wykonaniu polecenia, ale nie wprowadza zmiany. Przy operacjach na procesach, plikach i usługach daje chwilę na wychwycenie pomyłki.

Praca z plikami

Get-ChildItem . -Filter *.log -File |
    Where-Object Length -gt 1MB |
    Select-Object Name, Length, LastWriteTime

Ten skrypt wyszukuje duże pliki logów w bieżącym katalogu. To prosty przykład, ale dokładnie taki mechanizm wykorzystuję przy diagnozowaniu problemów z aplikacjami desktopowymi, które zapisują zbyt dużo danych na dysku.

Przed usuwaniem plików zawsze warto przeprowadzić próbę:

Get-ChildItem $env:TEMP -File |
    Remove-Item -WhatIf

Dopiero gdy lista wygląda poprawnie, można usunąć -WhatIf. Nie stosowałbym automatycznego czyszczenia całego katalogu tymczasowego bez dodatkowych warunków, ponieważ niektóre programy mogą właśnie z niego korzystać.

Instalowanie aplikacji

Na wspieranych komputerach polecenie winget pozwala instalować programy bez otwierania przeglądarki i przeklikiwania instalatorów.

winget search PowerShell
winget install --id Microsoft.PowerShell --source winget

To rozwiązanie dobrze pasuje do konfiguracji nowego stanowiska pracy. W większej firmie trzeba jednak dodać kontrolę źródeł, uprawnień i wersji, ponieważ automatyczna instalacja nie zastępuje procesu zarządzania oprogramowaniem.

Bezpieczeństwo, błędy i dobre praktyki

PowerShell daje duże możliwości, więc łatwo wykonać polecenie o poważnych skutkach. Zanim uruchomisz skrypt znaleziony w internecie, przeczytaj go w całości, sprawdź operacje na plikach i zobacz, czy nie pobiera ani nie uruchamia dodatkowego kodu.

Execution Policy nie jest antywirusem

Stan polityki sprawdzisz poleceniem:

Get-ExecutionPolicy -List

Ustawienie RemoteSigned pozwala uruchamiać lokalne skrypty, a skrypty pobrane z internetu wymagają podpisu lub odblokowania. Microsoft Learn wyraźnie zaznacza, że polityka wykonywania jest zabezpieczeniem przed przypadkowym uruchomieniem skryptu, ale nie stanowi granicy bezpieczeństwa. Nie powinna być traktowana jako zamiennik kontroli uprawnień, ochrony endpointów i analizy kodu.

Na prywatnym komputerze można ustawić zakres tylko dla bieżącego użytkownika:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

W firmie ustawienie może być narzucone przez zasady grupy. Nie zmieniałbym polityki globalnie tylko dlatego, że jeden skrypt nie chce się uruchomić. Najpierw sprawdziłbym, czy plik nie został oznaczony jako pobrany z internetu i czy nie wymaga uruchomienia w innej wersji PowerShella.

Obsługa błędów w skryptach

Jednorazowe polecenie może zakończyć się komunikatem, ale skrypt uruchamiany automatycznie powinien reagować na problemy. Przydatne są -ErrorAction Stop, blok try/catch i czytelne komunikaty.

try {
    Get-Item "C:\Raporty\dane.csv" -ErrorAction Stop
}
catch {
    Write-Error "Nie znaleziono pliku lub brak dostępu."
}

Dobrym zwyczajem jest także unikanie uruchamiania terminala jako administrator, gdy nie jest to konieczne. Uprawnienia administracyjne powinny być potrzebne do konkretnej operacji, a nie włączone przez cały czas.

Przeczytaj również: var w JavaScripcie - zakres, hoisting i pułapki starego kodu

Najczęstsze problemy

  • Nie znaleziono polecenia oznacza często literówkę, brak modułu albo użycie innej wersji środowiska.
  • Skrypt nie może zostać uruchomiony może wymagać sprawdzenia Execution Policy lub odblokowania pliku.
  • Brak dostępu nie zawsze oznacza problem z PowerShellem. Operacja może wymagać uprawnień administratora albo dostępu do konkretnego katalogu.
  • Inny wynik niż oczekiwany często wynika z pracy w niewłaściwym katalogu. Pomagają polecenia Get-Location i Get-ChildItem.

Dobry pierwszy krok z PowerShellem w Windows

Na początek zainstalowałbym PowerShell 7 obok wersji 5.1, uruchomił kilka poleceń typu Get-Process i Get-Service, a potem zbudował mały skrypt rozwiązujący realny problem. Najlepszym ćwiczeniem jest automatyzacja czegoś powtarzalnego, na przykład raportu o procesach, porządkowania plików lub przygotowania środowiska deweloperskiego.

Nie trzeba od razu pisać rozbudowanych modułów. Wystarczy poznać cmdlety, potok, właściwości obiektów i bezpieczne testowanie z -WhatIf. Te cztery elementy dają solidną bazę do dalszej pracy z Windows, .NET, Azure i automatyzacją aplikacji desktopowych.

FAQ - Najczęstsze pytania

PowerShell 5.1 jest częścią Windows i zapewnia największą zgodność ze starszymi modułami systemowymi. PowerShell 7 instaluje się osobno, działa obok wersji 5.1 i jest lepszym wyborem do nowych skryptów oraz pracy na Windows, Linuxie i macOS.

Na typowym komputerze z Windows 11 otwórz Terminal lub PowerShell i wykonaj polecenie winget install --id Microsoft.PowerShell --source winget. Po instalacji nową wersję uruchomisz poleceniem pwsh. Alternatywnie możesz użyć instalatora MSI, pakietu MSIX lub archiwum ZIP.

Potok przekazuje do kolejnego polecenia obiekty wraz z ich właściwościami, a nie tylko tekst. Dzięki temu możesz na przykład pobrać uruchomione usługi, odfiltrować je przez Where-Object i posortować przez Sort-Object bez żmudnego parsowania danych.

Nie. Execution Policy ogranicza przede wszystkim przypadkowe uruchamianie skryptów, ale nie jest pełną granicą bezpieczeństwa ani zamiennikiem kontroli uprawnień, ochrony endpointów i analizy kodu. Jej ustawienia sprawdzisz poleceniem Get-ExecutionPolicy -List, a zakres dla bieżącego użytkownika możesz zmienić na RemoteSigned.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi

powershell
winget
automatyzacja
cmdlety
potok
Autor Przemysław Kwiatkowski
Przemysław Kwiatkowski
Jestem Przemysław i od 15 lat zajmuję się programowaniem .NET, chmurą Azure oraz sztuczną inteligencją. Moja przygoda z tymi technologiami zaczęła się od fascynacji możliwościami, jakie dają, a z czasem przerodziła się w pasję do tworzenia rozwiązań, które realnie wpływają na pracę i życie ludzi. Na kursdotnet.pl staram się dzielić się swoją wiedzą w sposób przystępny, tłumacząc złożone zagadnienia i pomagając zrozumieć, jak te dynamicznie rozwijające się obszary IT mogą być wykorzystane w praktyce. Dokładam wszelkich starań, aby prezentowane przeze mnie materiały były rzetelne, aktualne i oparte na sprawdzonych źródłach, a także aby uporządkować wiedzę w sposób ułatwiający jej przyswojenie.

Udostępnij artykuł

Napisz komentarz