Cześć, miło znów Cię widzieć w mini cyklu poświęconym podstawom pracy z PowerShellem. Dzisiaj nieco bliżej przyjrzymy się obiektom. W tym wpisie wyjaśnię Ci, czym jest obiekt, jak jest zbudowany i jak możesz skutecznie z niego korzystać w pracy z PowerShellem. Także nie ma co zwlekać, Zaczynamy.
Czym jest obiekt?
W tradycyjnych powłokach, takich jak cmd.exe czy powłoki w stylu Unix, wszystko, co widzisz, to zwykły tekst. Każde polecenie zwraca linie tekstu, a jeśli chcesz wyodrębnić kolumnę lub przefiltrować dane, musisz używać narzędzi do parsowania tekstu, takich jak grep
, awk
czy findstr
. PowerShell zmienia ten sposób myślenia całkowicie. Zamiast przesyłać między poleceniami zwykły tekst, przesyła obiekty. To jedna z kluczowych cech, które czynią PowerShell tak potężnym i wygodnym w automatyzacji systemów.
Ale czym jest ów obiekt? Najprościej mówiąc, obiekt w kontekście programowania obiektowego to instancja klasy, która może zawierać zarówno dane (właściwości ang.properties), jak i funkcje (metody ang. methods). Zależnie od okoliczności, możemy być bardziej zainteresowani właściwościami albo metodami danego obiektu. Te pierwsze zapewniają możliwość opisania danego obiektu, te drugie umożliwiają zrobienie czegoś. Właściwości oraz metody potocznie nazywane są elementami członkowskimi (ang. members).
W skrócie:
- Właściwości — informacje o obiekcie
- Metody — działania, które można wykonać na obiekcie
Dla ułatwienia myśl o obiekcie jak o rekordzie w bazie danych albo wierszu w tabeli Excela: ma pola (właściwości) oraz funkcje, które można na nim wykonać (metody).
Właściwości obiektu
Właściwość to atrybut lub informacja opisująca obiekt. Każdy obiekt może posiadać wiele właściwości. Przyjrzyjmy się prostemu przykładowi z listą procesów:
PS C:\Users\Admin> Get-Process
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
10 2.92 12.04 0.00 8304 0 AggregatorHost
11 1.86 9.81 19.48 1492 1 ApMsgFwd
9 1.23 7.32 0.12 2956 1 ApntEx
17 3.51 20.19 5.42 4592 1 Apoint
17 11.23 32.66 0.70 15660 1 AppActions
Polecenie Get-Process zwraca listę procesów działających aktualnie na Twoim komputerze. Każdy taki proces traktowany jest jak obiekt. To znaczy, że posiada m.in. właściwości takie jak przykładowo:
WS(M)
— zużycie pamięciCPU(s)
— czas użycia procesoraId
— identyfikator procesuProcessName
— nazwa procesu- itd.
Chociaż może się to wydawać sporo to zwykle PowerShell wyświetla tylko niewielką liczbę posiadanych przez obiekt właściwości. Jeśli chcesz przeanalizować je dokładniej, możesz wybrać konkretny proces i wyświetlić wszystkie jego właściwości:
PS C:\Users\Admin> Get-Process -Name Notepad | Select *
Name : Notepad
Id : 18676
PriorityClass : Normal
FileVersion : 11.2507.26.0
HandleCount : 1165
WorkingSet : 132481024
PagedMemorySize : 62488576
PrivateMemorySize : 62488576
VirtualMemorySize : 630501376
TotalProcessorTime : 00:00:01.9687500
SI : 1
Handles : 1165
VM : 2203948724224
WS : 132481024
PM : 62488576
NPM : 47640
Path : C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_11.2507.26.0_x64__8wekyb
3d8bbwe\Notepad\Notepad.exe
CommandLine : "C:\Program Files\WindowsApps\Microsoft.WindowsNotepad_11.2507.26.0_x64__8weky
b3d8bbwe\Notepad\Notepad.exe"
Parent : System.Diagnostics.Process (explorer)
Company : Microsoft Corporation
CPU : 1.96875
ProductVersion : 11.2507.26.0
Description : Notepad.exe
Product : Notepad
__NounName : Process
SafeHandle : Microsoft.Win32.SafeHandles.SafeProcessHandle
Handle : 3136
BasePriority : 8
ExitCode :
HasExited : False
StartTime : 22/09/2025 13:03:38
ExitTime :
MachineName : .
MaxWorkingSet : 1413120
MinWorkingSet : 204800
Modules : {System.Diagnostics.ProcessModule (Notepad.exe),
System.Diagnostics.ProcessModule (ntdll.dll),
System.Diagnostics.ProcessModule (KERNEL32.DLL),
System.Diagnostics.ProcessModule (KERNELBASE.dll)…}
NonpagedSystemMemorySize64 : 47640
NonpagedSystemMemorySize : 47640
PagedMemorySize64 : 62488576
PagedSystemMemorySize64 : 903400
PagedSystemMemorySize : 903400
PeakPagedMemorySize64 : 64176128
PeakPagedMemorySize : 64176128
PeakWorkingSet64 : 135647232
PeakWorkingSet : 135647232
PeakVirtualMemorySize64 : 2203951214592
PeakVirtualMemorySize : 632991744
PriorityBoostEnabled : True
PrivateMemorySize64 : 62488576
ProcessorAffinity : 255
SessionId : 1
StartInfo :
Threads : {16588, 18760, 9588, 19256…}
VirtualMemorySize64 : 2203948724224
EnableRaisingEvents : False
StandardInput :
StandardOutput :
StandardError :
WorkingSet64 : 132481024
SynchronizingObject :
MainModule : System.Diagnostics.ProcessModule (Notepad.exe)
PrivilegedProcessorTime : 00:00:00.9687500
UserProcessorTime : 00:00:01
ProcessName : Notepad
MainWindowHandle : 197660
MainWindowTitle : *# Rola - Notepad
Responding : True
Site :
Container :
Dzięki temu otrzymasz szczegółową listę wszystkich właściwości obiektu. Jak widzisz, jest ich dość sporo.
Metody obiektu
Metoda to funkcja, którą możesz wywołać na obiekcie, aby coś zrobił. Kontynuujmy przykład z procesem i postarajmy się go zakończyć.
PS C:\Users\Admin> (Get-Process -Name Notepad).kill()
Tutaj Kill()
to metoda, która zatrzymuje (zabija) proces.
Teraz nieco inny przykład.
Zastosujemy metodę ToUpper()
na obiekcie tekstowym (gdyż w PowerShellu nawet tekst jest obiektem):
PS C:\Users\Admin> "Hello PowerShell".ToUpper()
HELLO POWERSHELL
Jak możesz zauważyć, w rezultacie otrzymałem zmodyfikowany tekt. MetodaToUpper()
to metoda obiektu typu string, która zamienia wszystkie litery na wielkie.
💡Warto wiedzieć
W celu odwołania się do danej właściwości lub metody zastosuj kropkę (.) a następnie konkretną nazwę.
"Hello PowerShell".Length
W przypadku metod pamiętaj o dodatkowych nawiasach na końcu (), a przy pracy z cmdletami całość również musi być w nawiasach.
"Hello PowerShell".ToUpper()
(Get-Process -Name Notepad).kill()
Jak odkrywać właściwości i metody
Wiesz już czym jest obiekt, z czego się składa oraz jak można wywoływać jego metody. Zastanawiasz się zapewne jak znaleźć dostępne metody i właściwości konkretnego obiektu? Otóż PowerShell posiada do tego celu bardzo przydatny cmdlet Get-Member
. Zobaczmy przykład z wykorzystaniem naszego tekstu:
PS C:\Users\Admin> "Hello PowerShell" | Get-Member
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
CompareTo Method int CompareTo(System.Object value), int CompareTo(string strB),…
Contains Method bool Contains(string value), bool Contains(string value, System…
CopyTo Method void CopyTo(int sourceIndex, char[] destination, int destinatio…
EndsWith Method bool EndsWith(string value), bool EndsWith(string value, System…
EnumerateRunes Method System.Text.StringRuneEnumerator EnumerateRunes()
Equals Method bool Equals(System.Object obj), bool Equals(string value), bool…
GetEnumerator Method System.CharEnumerator GetEnumerator(), System.Collections.IEnum…
GetHashCode Method int GetHashCode(), int GetHashCode(System.StringComparison comp…
GetPinnableReference Method System.Char&, System.Private.CoreLib, Version=9.0.0.0, Culture=…
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Get…
IndexOf Method int IndexOf(char value), int IndexOf(char value, int startIndex…
IndexOfAny Method int IndexOfAny(char[] anyOf), int IndexOfAny(char[] anyOf, int …
Insert Method string Insert(int startIndex, string value)
IsNormalized Method bool IsNormalized(), bool IsNormalized(System.Text.Normalizatio…
LastIndexOf Method int LastIndexOf(char value), int LastIndexOf(char value, int st…
LastIndexOfAny Method int LastIndexOfAny(char[] anyOf), int LastIndexOfAny(char[] any…
Normalize Method string Normalize(), string Normalize(System.Text.NormalizationF…
PadLeft Method string PadLeft(int totalWidth), string PadLeft(int totalWidth, …
PadRight Method string PadRight(int totalWidth), string PadRight(int totalWidth…
Remove Method string Remove(int startIndex, int count), string Remove(int sta…
Replace Method string Replace(string oldValue, string newValue, bool ignoreCas…
ReplaceLineEndings Method string ReplaceLineEndings(), string ReplaceLineEndings(string r…
Split Method string[] Split(char separator, System.StringSplitOptions option…
StartsWith Method bool StartsWith(string value), bool StartsWith(string value, Sy…
Substring Method string Substring(int startIndex), string Substring(int startInd…
ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)
ToCharArray Method char[] ToCharArray(), char[] ToCharArray(int startIndex, int le…
ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provide…
ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16 Method short IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)
ToLower Method string ToLower(), string ToLower(cultureinfo culture)
ToLowerInvariant Method string ToLowerInvariant()
ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)
ToString Method string ToString(), string ToString(System.IFormatProvider provi…
ToType Method System.Object IConvertible.ToType(type conversionType, System.I…
ToUInt16 Method ushort IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32 Method uint IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64 Method ulong IConvertible.ToUInt64(System.IFormatProvider provider)
ToUpper Method string ToUpper(), string ToUpper(cultureinfo culture)
ToUpperInvariant Method string ToUpperInvariant()
Trim Method string Trim(), string Trim(char trimChar), string Trim(Params c…
TrimEnd Method string TrimEnd(), string TrimEnd(char trimChar), string TrimEnd…
TrimStart Method string TrimStart(), string TrimStart(char trimChar), string Tri…
TryCopyTo Method bool TryCopyTo(System.Span[char] destination)
Chars ParameterizedProperty char Chars(int index) {get;}
Length Property int Length {get;}
Wykonując takie polecenie w efekcie zobaczysz listę wszystkich właściwości i metod obiektu typu System.String, czyli łańcucha znaków. Każdy typ obiektu będzie posiadał nieco inny zestaw. Zauważ, że w naszym przykładzie występuje tylko jedna właściwość Length
. Jak myślisz co reprezentuje? Koniecznie sprawdź.
Praktyczne przykłady
Teraz czas na kilka praktycznych przykładów z zastosowaniem logiki obiektowej, aby nieco lepiej zobrazować Ci praktyczne możliwości obiektów.
Przykład 1: Filtrowanie procesów po właściwości
W pierwszym przykładzie wykorzystam właściwość WorkingSet
i dokonam prostego filtrowania za pomocą Where-Object
. Dzięki czemu PowerShell wyświetl wszystkie procesy, które używają więcej niż 100 MB pamięci:
PS C:\Users\Admin> Get-Process | Where-Object {$_.WorkingSet -gt 100MB}
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
38 266.08 242.22 437.17 5728 1 chrome
28 258.65 112.46 80.14 6080 1 chrome
70 408.36 399.82 1,082.00 8580 1 chrome
64 808.82 891.97 422.73 15528 1 chrome
54 530.77 615.26 166.97 19224 1 chrome
36 165.71 169.49 686.17 19396 1 chrome
29 99.02 138.05 28.34 20016 1 chrome
51 94.12 125.94 252.97 21892 1 chrome
67 520.44 504.90 594.91 22476 1 chrome
41 229.41 297.38 91.19 22480 1 chrome
111 408.73 506.27 1,724.89 22676 1 chrome
49 278.66 285.02 142.50 22872 1 chrome
48 244.73 326.98 72.81 24424 1 chrome
33 118.66 163.97 909.27 24468 1 chrome
28 57.64 121.24 3.05 25680 1 chrome
70 160.70 102.47 0.00 1692 1 dwm
115 149.25 221.16 234.41 1592 1 explorer
0 3.01 836.99 0.00 3820 0 Memory Compression
37 207.05 178.70 107.61 10952 1 msedge
55 108.16 168.52 183.91 22848 1 msedge
239 340.23 243.40 0.00 5872 0 MsMpEng
172 132.34 114.06 1,399.73 16200 1 PAD.Console.Host
96 51.64 148.08 5.41 26692 1 PhoneExperienceHost
67 36.42 102.76 1.45 28548 1 pwsh
Przykład 2: Restart usługi
W następnym przykładzie przeprowadzę ręczny restart usługi wuauserv (Windows Update). W pierwszej kolejności zidentyfikuję odpowiednią usługę przy użyciu polecenia Get-Service
i sprawdzę jej status. Następnie zatrzymam ją metodą Stop()
. Ponownie sprawdzę status i uruchomię usługę metodą Start()
.
PS C:\Windows\System32> Get-Service -Name "wuauserv"
Status Name DisplayName
------ ---- -----------
Running wuauserv Windows Update
PS C:\Windows\System32> (Get-Service -Name "wuauserv").Stop()
PS C:\Windows\System32> Get-Service -Name "wuauserv"
Status Name DisplayName
------ ---- -----------
Stopped wuauserv Windows Update
PS C:\Windows\System32> (Get-Service -Name "wuauserv").Start()
PS C:\Windows\System32> Get-Service -Name "wuauserv"
Status Name DisplayName
------ ---- -----------
Running wuauserv Windows Update
Metody Stop()
oraz Start()
pozwalają na zarządzanie statusem usług w systemie Windows.
Przykład 3: Manipulacja tekstem
Kolejny przykład dotyczy pracy z tekstem. Weźmy nasz napis "Hello PowerShell"
i zastosujmy metodę Replace(), która pozwala zamienić wskazany fragment tekstu na inny. W efekcie otrzymamy zupełnie nowy ciąg znaków. Spójrzmy jak to wygląda:
PS C:\Users\Admin> "Hello PowerShell".Replace("PowerShell", "Adam")
Hello Adam
Metoda Replace()
zwraca nowy ciąg znaków, w którym słowo „great” zostało zamienione na „awesome”.
Podsumowanie
Myślenie w kategoriach obiektów to jedna z najważniejszych zmian w podejściu do pracy w PowerShellem. Gdy nauczysz się swobodnie korzystać z właściwości i metod, poczujesz się znacznie pewniej nie tylko w interaktywnej pracy z konsolą, ale również przy tworzeniu skryptów, automatyzacji i narzędzi do zarządzania systemem.
Ćwiczenia dla ambitnych:
Wybierz kilka cmdletów (np. Get-Process
, Get-Service
, Get-EventLog
), prześlij ich wyniki do Get-Member
i sprawdź, jakie mają właściwości i metody. Spróbuj ich użyć i przefiltrować dane według właściwości. To najlepszy sposób, aby naprawdę zrozumieć magię obiektów.
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.