Po opanowaniu pracy z obiektami i filtrowaniem danych nadszedł czas, aby poznać jeden z najważniejszych elementów w PowerShellu i ogólnie w całym świecie programistycznym: czyli zmienne. Z tego wpisu dowiesz się, czym jest zmienna, jakie typy zmiennych mamy do dyspozycji oraz jak prosto i efektywnie pracować z takimi zmiennymi z poziomu PowerShella.
Czym jest zmienna?
Zmienna (ang. variable) to nic innego jak element pamięci, który służy do przechowywania wartości. W PowerShellu zmienne reprezentowane są przez ciągi tekstowe, które zaczynają się od znaku dolara ($), na przykład $moja_zmienna
. Należy pamiętać jednak, że znak dolara nie stanowi części samej zmiennej, jest to jedynie wskazówka dla PowerShella, że chcemy odwołać się do zawartości zmiennej. Nazwy zmiennych nie rozróżniają wielkości liter, co oznacza, że $moja_zmienna
, $Moja_Zmienna
i $MOJA_ZMIENNA
będą traktowane równoważnie jako ta sama zmienna. Nazwy mogą zawierać spacje i znaki specjalne, jednak w praktyce zaleca się stosowanie prostych, zrozumiałych nazw. Ułatwia to unikanie pomyłek i sprawia, że skrypty i polecenia stają się bardziej czytelne. Warto również postarać się, aby nazwa zmiennej jasno odzwierciedlała jej przeznaczenie. Dzięki temu kod jest bardziej intuicyjny i łatwiejszy do zrozumienia. Za pomocą zmiennych możemy przechowywać wszystkie typy wartości dostępne w PowerShellu, w tym wyniki poleceń, ścieżki, nazwy, ustawienia i inne dane wykorzystywane w poleceniach czy wyrażeniach.

Podstawowe cmdlety
PowerShell udostępnia zestaw cmdletów przeznaczonych do pracy ze zmiennymi. Dzięki nim możemy je tworzyć, modyfikować, usuwać czy wyświetlać ich zawartość. Znajomość tych poleceń znacząco ułatwia zarządzanie środowiskiem i pozwala w pełni wykorzystać potencjał zmiennych w praktycznych scenariuszach administracyjnych. Poniżej znajdziesz spis cmdletów dotyczących zmiennych wraz z ich krótkim opisem.
Cmdlet | opis |
---|---|
Get-Variable | pobiera i wyświetla wszystkie zmienne w bieżącej sesji |
New-Variable | tworzy nową zmienną |
Set-Variable | tworzy lub zmienia zmienną |
Remove-Variable | usuwa zmienną |
Clear-Variable | usuwa dane zapisane w zmiennej wartość katalogu |
Rodzaje zmiennych
W PowerShellu wyróżniamy kilka rodzajów zmiennych, z których każda posiada własne właściwości i konkretne zastosowania. Ich poprawne zrozumienie jest kluczem do sprawnego korzystania z języka i efektywnego zarządzania danymi w codziennej pracy.
rodzaj zmiennych | opis |
---|---|
użytkownika | istnieją tylko w bieżącej sesji, posiadają trzy zakresy: globalny, skryptowy, lokalny |
automatyczne | stan PowerShella, nie można ich zmienić (np.: $PSHome) |
preferencji | preferencje użytkownika dotyczące zachowania PowerShella (np.: $ErrorActionPreference) |
środowiskowe | dane używane przez system operacyjny i inne programy (np.: $Env:UserName) |
Typy zmiennych
W PowerShellu zmienne mogą przechowywać dane różnych typów, od prostych wartości liczbowych i tekstowych, po kolekcje, obiekty czy struktury bardziej złożone. Typ zmiennej decyduje o tym, jakie operacje można na niej wykonywać i jak interpretowane będą przechowywane dane. Zrozumienie różnych typów zmiennych pozwala tworzyć bardziej precyzyjne i niezawodne skrypty. Poniżej najczęściej stosowane typy wraz z krótkim opisem.
TYP ZMIENNEJ | OPIS |
---|---|
[string] | typ reprezentujący łańcuch znaków |
[char] | typ reprezentujący pojedynczy znak |
[byte] | typ reprezentujący ciąg bitów |
[int] | typ reprezentujący liczbę całkowitą |
[bool] | typ reprezentujący wartości logiczne |
[single] | typ reprezentujący 32-bitową przybliżoną wartość liczby rzeczywistej |
[double] | typ reprezentujący 64-bitową przybliżoną wartość liczby rzeczywistej |
[DateTime] | obiekt data i czas |
[array] | tablica |
[hashtable] | tablica skrótów |
Zasięg Zmiennych
Zasięg zmiennej (ang. scope) określa, gdzie dana zmienna jest dostępna w ramach działania PowerShella. W większości przypadków zmienne istnieją wyłącznie w kontekście, w którym zostały zadeklarowane na przykład w obrębie konkretnego skryptu lub sesji. W niektórych sytuacjach jednak celowe ograniczenie zasięgu zmiennej może być pożądane, zwłaszcza gdy przechowuje ona dane wrażliwe. Główne zasięgi to:
1. Lokalny (ang. Local): domyślny zasięg, dostępny tylko w bieżącej sesji
2. Skryptowy (ang. Script): dostępny tylko w skrypcie, w którym zmienna została zadeklarowana. Przydatny, jeśli zmienna używana w module ma być niedostępna po wywołaniu funkcji
3. Globalny (ang. Global): dostępny w bieżącej sesji i wszystkich sesjach, które zostaną przez nią utworzone
Aby jawnie wskazać zasięg zmiennej, należy użyć modyfikatora, np. $script:nazwa_zmiennej
lub $global:nazwa_zmiennej
. Stosowanie modyfikatorów jest dobrą praktyką, ponieważ ułatwia rozwiązywanie problemów i zapobiega nieporozumieniom.
Przykłady praktyczne
Poniżej znajdziesz kilka praktycznych przykładów dotyczących wykorzystania zmiennych w różnych scenariuszach i sytuacjach.
Wyświetlenie wszystkich zmiennych w danej sesji
PS C:\Users\Admin> Get-Variable
Name Value
---- -----
? True
^
$
args {}
ConfirmPreference High
DebugPreference SilentlyContinue
EnabledExperimentalFeatures {}
Error {}
ErrorActionPreference Continue
ErrorView ConciseView
ExecutionContext System.Management.Automation.EngineIntrinsics
false False
FormatEnumerationLimit 4
HOME C:\Users\Admin
Host System.Management.Automation.Internal.Host.InternalHost
InformationPreference SilentlyContinue
input System.Collections.ArrayList+ArrayListEnumeratorSimple
IsCoreCLR True
IsLinux False
IsMacOS False
IsWindows True
MaximumHistoryCount 4096
Po wykonaniu cmdletu Get-Variable
wyświetlone zostały wszystkie zmienne, które zdefiniowane zostały w bieżącej sesji PowerShella.
Utworzenie nowej zmiennej
Utworzenie zmiennej w PowerShellu może przebiegać na kilka sposobów w większości przypadków wystarczy podać nazwę zmiennej, operator przypisania oraz jej wartość:
PS C:\Users\Admin> $moja_zmienna = "Hello, PowerShell!"
W tym przypadku:
$myVariable
to nazwa- znak
=
przypisuje wartość "Hello, PowerShell!"
to tekst (łańcuch znaków), który przechowywany jest w zmiennej
Identycznie sprawa wygląda z liczbą:
PS C:\Users\Admin> $numer = 42
czy wynikiem polecenia:
PS C:\Users\Admin> $procesy = Get-Process
W tym przypadku zmienna $procesy
przechowuje kolekcję wszystkich działających procesów, które możesz przeglądać lub ponownie wykorzystać później.
W celu utworzenia zmiennej można również skorzystać z cmdletu, w tym przypadku będzie to wyglądało następująco:
PS C:\Users\Admin> New-Variable -Name Nowa_zmienna -value 123
⚠️ Zauważ, że przy wykorzystaniu cmdletów nie stosujemy znaku
$
w nazwie zmiennej
Chociaż PowerShell często określa typ danych automatycznie, możesz wymusić określony typ (np. tablicę, czyli [array]
):
# Tworzenie tablicy z liczbami [array]
PS C:\Users\Admin> $Liczby = 1, 2, 3, 4
PS C:\Users\Admin> [array]$MojaTablica = 1, 2, 3, 4
# Sprawdzenie typu danych używając funkcji GetType()
PS C:\Users\Admin> $Liczby.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Users\Admin> $MojaTablica.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
Korzystanie ze zmiennych automatycznych
Wykorzystaj wbudowane zmienne systemowe, np. do sprawdzenia wersji PowerShella lub pracy w potoku.
# Wyświetlenie informacji o wersji PowerShella
PS C:\Users\Admin> $PSVersionTable
Name Value
---- -----
PSVersion 7.5.3
PSEdition Core
GitCommitId 7.5.3
OS Microsoft Windows 10.0.26100
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Zmienna $_
reprezentuje bieżący obiekt podczas przetwarzania danych w potoku:
# Generowanie liczb od 1 do 5 i wyświetlenie bieżącej liczby
PS C:\Users\Admin> 1..5 | ForEach-Object {Write-Host "Bieżąca liczba: $_"}
Bieżąca liczba: 1
Bieżąca liczba: 2
Bieżąca liczba: 3
Bieżąca liczba: 4
Bieżąca liczba: 5
Zarządzanie zmiennymi za pomocą cmdletów
# Utworzenie nowej zmiennej za pomocą cmdletu Set-Variable
PS C:\Users\Admin> Set-Variable -Name MojaSciezka -Value "C:\temp"
# Wyświetlenie zmiennej
PS C:\Users\Admin> Get-Variable MojaSciezka
Name Value
---- -----
MojaSciezka C:\temp
# Usunięcie danych przechowywanych w zmiennej (resetowanie wartości)
PS C:\Users\Admin> Clear-Variable MojaSciezka
PS C:\Users\Admin> Get-Variable MojaSciezka # Pokaże zmienną z pustą wartością
Name Value
---- -----
MojaSciezka
# Całkowite usunięcie zmiennej z sesji
PS C:\Users\Admin> Remove-Variable MojaSciezka
PS C:\Users\Admin> Get-Variable MojaSciezka # Pokaże błąd, ponieważ zmienna już nie istnieje
Get-Variable: Cannot find a variable with the name 'MojaSciezka'.
Użycie zasięgu zmiennej
⚠️ Pamiętaj o używaniu modyfikatorów zasięgu, szczególnie gdy pracujesz w skryptach lub modułach
# Zadeklarowanie zmiennej w zasięgu globalnym
PS C:\Users\Admin> $global:GlobalnaZmienna = "Jestem dostępna wszędzie"
# Wyświetlenie zmiennej z dowolnego miejsca w bieżącej sesji
PS C:\Users\Admin> Write-Host $global:GlobalnaZmienna
Jestem dostępna wszędzie
Zapisanie przefiltrowanych usług
PS C:\Users\Admin> $runningServices = Get-Service | Where-Object {$_.Status -eq 'Running'}
PS C:\Users\Admin> $runningServices | Select-Object Name -First 5
Wyjaśnienie:
- Najpierw zapisujesz wszystkie uruchomione usługi w zmiennej
$runningServices
- Następnie sortujesz je i wybierasz tylko 5 pierwszych — bez ponownego wywoływania
Get-Service
Podsumowanie
W tym momencie masz już solidne podstawy, by swobodnie poruszać się w świecie zmiennych. Możesz się teraz zastanawiać, kiedy właściwie warto z nich korzystać. Odpowiedź brzmi: częściej, niż myślisz. Zmienne to nie tylko wygoda, ale realne usprawnienie pracy. Prawidłowe wykorzystanie zmiennych pozwala:
- oszczędzić czas – raz zapisany wynik możesz wykorzystać wielokrotnie, bez ponownego uruchamiania polecenia,
- zwiększyć czytelność kodu – skrypty z dobrze nazwanymi zmiennymi są prostsze do zrozumienia i utrzymania,
- poprawić wydajność – przy dużych zbiorach danych przechowywanie ich w zmiennej potrafi znacząco przyspieszyć działanie skryptu.
Warto zapamiętać, że zmienne to jedno z podstawowych narzędzi w PowerShellu, nie tylko pomagają organizować dane, upraszczają logikę, ale przede wszystkim otwierają drogę do automatyzacji bardziej złożonych zadań.
Na tym etapie warto po prostu zacząć eksperymentować. Przypisuj różne typy danych, zapisuj wyniki poleceń i obserwuj, jak zmienia się zachowanie skryptu. Każdy taki test to krok w stronę lepszego zrozumienia PowerShella i pewniejszego panowania nad jego możliwościami.
To wszystko na dziś!
Jeśli masz ciekawe spostrzeżenia lub doświadczenia w tym temacie – koniecznie podziel się nimi w komentarzach.
A jeśli moje materiały są dla Ciebie pomocne, możesz postawić mi wirtualną kawę.
Dzięki za wsparcie!


Adam Pietrzak
Trener IT | Autor szkoleń | Entuzjasta PowerShellaAdministrator systemów i sieci wsparcia działań wojskowych z ponad 10-letnim doświadczeniem. Praktyk w dziedzinie bezpieczeństwa systemu Windows, automatyzacji zadań (PowerShell) oraz rozwiązań chmurowych. Trener i twórca materiałów edukacyjnych (szkolenia, warsztaty, artykuły, podręczniki). Pasjonat dzielenia się wiedzą i wspierania początkujących administratorów IT. Prywatnie – amator aktywnego wypoczynku i rodzinnych podróży.