Przejdź do treści
Windows i Active Directory

PowerShell – 10 poleceń, które musisz poznać (z praktycznymi przykładami)

Podstawowe polecenia PowerShell z przykładami: Get-Help, Get-Command, Get-Member, Where-Object, Get-Service, Get-CimInstance, Invoke-Command i inne.

CZCzarek ZawolskiAktualizacja: 8 min czytania
Okno konsoli PowerShell z wynikami poleceń administracyjnych w systemie Windows

W skrócie

  • Trzy polecenia do samodzielnej nauki to Get-Help, Get-Command i Get-Member — dzięki nim znajdziesz każde kolejne polecenie i jego właściwości.
  • PowerShell przekazuje w potoku obiekty, nie tekst, dlatego filtrujesz je przez Where-Object, a kolumny wybierasz przez Select-Object.
  • Get-WmiObject nie istnieje w PowerShell 7 — zamiast niego używaj Get-CimInstance, który działa w obu wersjach.
  • Invoke-Command uruchamia polecenia na wielu komputerach naraz przez WinRM, co jest podstawą automatyzacji w domenie.
  • Windows 10 i 11 mają wbudowany Windows PowerShell 5.1; nowszy PowerShell 7 instalujesz osobno, np. przez winget.
Spis treści

Jeśli dopiero zaczynasz, naucz się najpierw trzech poleceń: Get-Help, Get-Command i Get-Member. Pozwalają one samodzielnie znaleźć każde inne polecenie PowerShell, przeczytać jego opis z przykładami i sprawdzić, co zwraca. Kolejne siedem z tej listy — od Get-ChildItem po Invoke-Command — pokrywa większość codziennej pracy administratora Windows.

Każde polecenie omawiam z przykładami, które możesz od razu wkleić do konsoli. Na końcu znajdziesz kilka dodatkowych cmdletów, przydatnych przy sieci, logach i eksporcie danych.

Zanim zaczniesz: Windows PowerShell 5.1 czy PowerShell 7

W Windows 10, Windows 11 i Windows Server jest wbudowany Windows PowerShell 5.1 (powershell.exe). Nie dostaje już nowych funkcji, ale nadal jest w pełni obsługiwany jako część systemu. Obok niego możesz zainstalować PowerShell 7 (pwsh.exe), który jest rozwijany jako projekt open source i działa też na Linuksie oraz macOS:

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

Wszystkie polecenia z tego artykułu działają w obu wersjach. Różnice zaznaczam tam, gdzie mają znaczenie.

Najważniejsza rzecz do zrozumienia: PowerShell przekazuje w potoku (|) obiekty z właściwościami, a nie tekst. Dlatego zamiast wycinać kolumny jak w grep czy awk, odwołujesz się do właściwości po nazwie, np. Status, Name, CPU. Nazwy poleceń mają stały schemat czasownik-rzeczownik (Get-Service, Stop-Process), a wielkość liter nie ma znaczenia.

1. Get-Help – wbudowana dokumentacja

Get-Help wyświetla opis, składnię i przykłady dowolnego polecenia. Za pierwszym razem pobierz pełną pomoc, bo domyślnie w systemie jest tylko jej skrócona wersja:

Update-Help -UICulture en-US -ErrorAction SilentlyContinue   # w 5.1 uruchom jako administrator
Get-Help Get-Process -Examples      # same przykłady
Get-Help Get-Process -Full          # pełny opis parametrów
Get-Help Get-Process -Online        # dokumentacja w przeglądarce
Get-Help about_Execution_Policies   # artykuły koncepcyjne „about_”

Parametr -Examples to najszybsza droga do działającego polecenia. Pomoc istnieje tylko po angielsku, stąd -UICulture en-US — bez tego na polskim Windows część modułów zgłasza brak pomocy w języku systemu.

2. Get-Command – znajdź polecenie, którego potrzebujesz

Nie musisz pamiętać nazw cmdletów. Get-Command przeszukuje wszystkie dostępne polecenia, funkcje i aliasy:

Get-Command *firewall*                    # wszystko, co dotyczy zapory
Get-Command -Verb Get -Noun *Disk*        # polecenia Get-…Disk…
Get-Command -Module NetTCPIP              # polecenia z konkretnego modułu
Get-Command dir                           # sprawdź, czym jest alias

Ostatni przykład pokaże, że dir to alias Get-ChildItem. Pełną listę aliasów wyświetlisz przez Get-Alias.

3. Get-Member – co właściwie zwraca polecenie

Skoro w potoku płyną obiekty, musisz wiedzieć, jakie mają właściwości i metody. Służy do tego Get-Member:

Get-Service | Get-Member
Get-Process | Get-Member -MemberType Property

Zobaczysz typ obiektu (np. System.ServiceProcess.ServiceController) i listę właściwości, takich jak Status, StartType czy DisplayName. To one stają się potem materiałem dla Where-Object, Select-Object i Sort-Object. Domyślny widok w konsoli pokazuje tylko kilka kolumn, a obiekt ma ich zwykle dużo więcej.

4. Get-ChildItem – pliki, foldery, rejestr

Get-ChildItem (aliasy dir, ls, gci) listuje zawartość folderu, ale działa też na innych „dyskach” PowerShella, np. rejestrze (HKLM:) czy magazynie certyfikatów (Cert:):

Get-ChildItem C:\Logi -Recurse -Filter *.log
Get-ChildItem C:\Users\Jan\Downloads -File | Sort-Object Length -Descending | Select-Object -First 10
Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Get-ChildItem Cert:\LocalMachine\My

Rozmiar folderu w gigabajtach policzysz tak:

(Get-ChildItem C:\Users\Jan\Downloads -Recurse -File | Measure-Object Length -Sum).Sum / 1GB

W PowerShell 7 na Linuksie alias ls nie istnieje — tam ls uruchamia natywny program systemowy. Jeśli pracujesz na obu systemach, przyda Ci się też zestaw 20 podstawowych poleceń Linuksa.

5. Where-Object – filtrowanie obiektów

Where-Object (aliasy where i ?) przepuszcza dalej tylko obiekty spełniające warunek. Są dwie składnie — uproszczona dla jednego warunku i pełna z blokiem skryptu:

Get-Service | Where-Object Status -eq 'Stopped'
Get-ChildItem C:\Logi -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) }
Get-Process | Where-Object { $_.CPU -gt 100 -and $_.Name -like 'chrome*' }

$_ (lub $PSItem) oznacza bieżący obiekt w potoku. Operatory porównania to -eq, -ne, -gt, -lt, -like (wieloznaczniki *) i -match (wyrażenia regularne). Domyślnie nie rozróżniają wielkości liter; wersje czułe na wielkość mają przedrostek c, np. -ceq.

Wskazówka: Jeśli polecenie ma własny parametr filtrowania (np. -Filter w Get-ChildItem czy Get-CimInstance), użyj go zamiast Where-Object. Filtrowanie odbywa się wtedy u źródła i przy dużych zbiorach działa wielokrotnie szybciej.

6. Select-Object i Sort-Object – wybór kolumn i kolejność

Select-Object wybiera właściwości do wyświetlenia albo pierwsze/ostatnie elementy, a Sort-Object sortuje wynik. W praktyce prawie zawsze występują razem:

Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU
Get-Service | Select-Object Name, Status, StartType

Możesz też tworzyć właściwości obliczane, np. przeliczyć bajty na megabajty:

Get-Process | Sort-Object WorkingSet64 -Descending |
    Select-Object -First 5 Name, @{ Name = 'PamięćMB'; Expression = { [math]::Round($_.WorkingSet64 / 1MB) } }

Uwaga na Format-Table i Format-List: służą tylko do wyświetlania i powinny być na samym końcu potoku. Po nich nie da się już sensownie eksportować danych.

7. Get-Process i Stop-Process – procesy

Get-Process to konsolowy odpowiednik Menedżera zadań, a Stop-Process zamyka procesy:

Get-Process -Name notepad
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
Stop-Process -Name notepad
Stop-Process -Id 4812 -Force

Przed zamknięciem czegoś ważnego dodaj -WhatIf — PowerShell pokaże, co by zrobił, bez wykonywania operacji. Parametr ten działa w większości poleceń, które coś zmieniają (Stop-, Remove-, Set-).

8. Get-Service, Restart-Service i Set-Service – usługi

Zarządzanie usługami to jedna z najczęstszych czynności na serwerach:

Get-Service -Name Spooler
Get-Service | Where-Object { $_.Status -eq 'Stopped' -and $_.StartType -eq 'Automatic' }
Restart-Service -Name Spooler
Set-Service -Name Spooler -StartupType Disabled

Drugie polecenie to dobry szybki test po restarcie serwera: pokazuje usługi, które powinny wystartować automatycznie, a nie działają. Zmiana stanu usług wymaga konsoli uruchomionej jako administrator.

9. Get-CimInstance – informacje o sprzęcie i systemie

Get-CimInstance odpytuje WMI, czyli bazę informacji o systemie Windows: sprzęt, dyski, BIOS, zainstalowany system. Zastępuje starsze Get-WmiObject, którego w PowerShell 7 już nie ma.

Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, LastBootUpTime
Get-CimInstance Win32_BIOS | Select-Object Manufacturer, SerialNumber
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
    Select-Object DeviceID, @{ n = 'WolneGB'; e = { [math]::Round($_.FreeSpace / 1GB, 1) } }

W ten sposób szybko sprawdzisz numer seryjny laptopa, czas od ostatniego uruchomienia czy wolne miejsce na dyskach. Typ dysku (SSD czy HDD) pokaże z kolei Get-PhysicalDisk — więcej sposobów opisuje poradnik jak sprawdzić, czy masz dysk SSD czy HDD.

10. Invoke-Command – polecenia na wielu komputerach naraz

Prawdziwa siła PowerShella ujawnia się przy zdalnym zarządzaniu. Invoke-Command wykonuje blok kodu na jednym lub wielu komputerach jednocześnie i zwraca wyniki z informacją, skąd pochodzą:

Invoke-Command -ComputerName SRV01, SRV02, SRV03 -ScriptBlock {
    Get-Service -Name Spooler | Select-Object Name, Status
}

Enter-PSSession -ComputerName SRV01    # interaktywna sesja zdalna
Exit-PSSession

Zdalne zarządzanie korzysta z protokołu WinRM. Na Windows Server jest włączone domyślnie, na stacjach roboczych włączasz je poleceniem Enable-PSRemoting (jako administrator) albo zasadami grupy. W domenie uwierzytelnianie odbywa się przez Kerberos, więc nie musisz podawać hasła — wystarczą uprawnienia Twojego konta. Jeśli komputer nie jest jeszcze w domenie, zobacz poradnik dołączania komputera do domeny.

Polecenia, które przydadzą się zaraz potem

Kiedy opanujesz pierwszą dziesiątkę, te cmdlety szybko staną się codziennymi narzędziami:

PolecenieDo czego służyPrzykład
Test-NetConnectionPing i test portu TCPTest-NetConnection srv01 -Port 3389
Get-NetIPConfigurationKonfiguracja IP kart sieciowychGet-NetIPConfiguration
Get-WinEventOdczyt dzienników zdarzeńGet-WinEvent -FilterHashtable @{LogName='System'; Level=2}
Export-CsvEksport wyników do pliku CSVGet-Service | Export-Csv uslugi.csv
Install-ModuleInstalacja modułów z PowerShell GalleryInstall-Module PSWindowsUpdate -Scope CurrentUser
Get-ExecutionPolicySprawdzenie polityki uruchamiania skryptówGet-ExecutionPolicy -List

Zmianę adresu IP z poziomu PowerShella (New-NetIPAddress, Set-DnsClientServerAddress) opisuje artykuł jak zmienić IP w komputerze z Windows.

Przy eksporcie do CSV, który otworzysz w polskim Excelu, dodaj -Delimiter ';', a w Windows PowerShell 5.1 także -Encoding UTF8 — inaczej polskie znaki zamienią się w znaki zapytania. W PowerShell 7 dla Excela lepiej sprawdza się -Encoding utf8BOM.

Pierwszy skrypt i polityka wykonywania

Pojedyncze polecenia łatwo zamienić w skrypt .ps1. Domyślnie jednak Windows 10 i 11 mają politykę Restricted, która blokuje uruchamianie jakichkolwiek skryptów (Windows Server ma domyślnie RemoteSigned). Dla własnego konta zmienisz to tak:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Przykładowy skrypt, który łączy kilka poznanych poleceń — usuwa logi starsze niż 30 dni, najpierw w trybie próbnym:

$folder = 'C:\Logi'
$granica = (Get-Date).AddDays(-30)

Get-ChildItem $folder -Recurse -File -Filter *.log |
    Where-Object { $_.LastWriteTime -lt $granica } |
    Remove-Item -WhatIf

Uwaga: Remove-Item nie przenosi plików do Kosza, tylko usuwa je od razu. Zawsze uruchom skrypt najpierw z -WhatIf, sprawdź listę plików i dopiero potem usuń ten parametr.

Polityka wykonywania nie jest zabezpieczeniem przed złośliwym kodem, tylko ochroną przed przypadkowym uruchomieniem skryptu. W firmie ustawia się ją centralnie przez GPO — przykłady takich ustawień znajdziesz w zestawieniu obiektów GPO przydatnych dla bezpieczeństwa.

Jak uczyć się dalej

Najlepsza metoda to zamieniać na PowerShell rzeczy, które dziś robisz ręcznie: sprawdzanie usług po restarcie, raport wolnego miejsca na serwerach, czyszczenie folderów. Przy każdym nowym zadaniu zaczynaj od Get-Command, czytaj przykłady w Get-Help i sprawdzaj obiekty przez Get-Member.

Jeśli wolisz uporządkowany kurs w formie książki, dobrym startem jest „Windows PowerShell 5.0 krok po kroku” Eda Wilsona, a dla administratorów nastawionych na automatyzację — „PowerShell dla administratorów systemów” Adama Bertrama. Aktualną dokumentację wszystkich poleceń Microsoft publikuje na learn.microsoft.com/powershell.

Najczęściej zadawane pytania

Jakie są podstawowe polecenia PowerShell?

Na start najważniejsze są Get-Help, Get-Command, Get-Member, Get-ChildItem, Where-Object, Select-Object, Get-Process, Get-Service, Get-CimInstance i Invoke-Command. Pozwalają znaleźć polecenie, zrozumieć zwracane obiekty i wykonać typowe zadania administracyjne.

Czym różni się Windows PowerShell 5.1 od PowerShell 7?

Windows PowerShell 5.1 jest wbudowany w Windows i oparty na .NET Framework, nie jest już rozwijany. PowerShell 7 (polecenie pwsh) działa na .NET, także na Linuksie i macOS, jest aktywnie rozwijany i instaluje się go obok wersji 5.1.

Jak włączyć uruchamianie skryptów PowerShell?

Wpisz Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Lokalne skrypty będą działać, a pobrane z internetu muszą być podpisane. Na Windows 10 i 11 domyślna polityka to Restricted, która blokuje wszystkie skrypty.

Czy w PowerShell działają polecenia z CMD, np. dir i cd?

Tak, bo dir, cd, cls czy copy to aliasy poleceń PowerShell, np. dir to Get-ChildItem. Inne są ich parametry: zamiast dir /s piszesz Get-ChildItem -Recurse.

CZ

Autor

Czarek Zawolski

Założyciel i redaktor XAD.pl. Pisze o sieciach, bezpieczeństwie IT, administracji systemami Windows i Linux oraz o sprzęcie, który sprawia ludziom problemy na co dzień.