Get-ChildItem to powershellowy odpowiednik tego, co w cmd robi dir, a w Linuksie ls — tylko mocniejszy. Listuje zawartość lokalizacji: katalogu na dysku, ale też kluczy rejestru, zmiennych środowiskowych czy certyfikatów, bo w PowerShellu wszystko jest „dostawcą” (provider). W praktyce 99% czasu używasz go do przeglądania plików i folderów. Ma dwa aliasy, które na pewno spotkasz: gci oraz, dla wygody migrujących, ls i dir.
Składnia i najważniejsze opcje
Podstawowa forma wygląda tak: Get-ChildItem [[-Path]
-Path— lokalizacja do wylistowania. Pozycyjny, więc możesz go pominąć i podać samą ścieżkę. Bez niego bierze bieżący katalog.-Filter— filtr po stronie dostawcy, szybki, ale obsługuje tylko proste wieloznaczniki (*.log). Działa najwydajniej przy-Recurse.-Recurse— schodzi do podkatalogów, rekurencyjnie. Bez tego widzisz tylko jeden poziom.-Depth— ogranicza głębokość rekurencji (np.-Depth 2), żeby nie zalać się całym drzewem.-File— pokazuje wyłącznie pliki, pomija foldery.-Directory— odwrotnie: tylko katalogi.-Force— dorzuca elementy ukryte i systemowe, które normalnie są pomijane.-Include/-Exclude— bardziej elastyczne dopasowanie po nazwie;-Includewymaga zwykle-Recursealbo ścieżki kończącej się\*.
Przykłady użycia
Get-ChildItem— listuje bieżący katalog, jeden poziom w głąb.Get-ChildItem C:\Logs -Filter *.log -Recurse— znajduje wszystkie pliki.logw katalogu i podkatalogach.Get-ChildItem -Directory— pokazuje same foldery, bez plików.Get-ChildItem -Recurse -File | Measure-Object -Property Length -Sum— liczy łączny rozmiar wszystkich plików w drzewie.Get-ChildItem Env:— listuje zmienne środowiskowe, bo to też „katalog” w świecie providerów.
Częste błędy i pułapki
Mylenie -Filter z -Include. -Filter jest szybszy, ale przyjmuje tylko jeden wzorzec i prymitywne wieloznaczniki. -Include bierze listę i bogatsze wzorce, lecz bez -Recurse lub \* na końcu ścieżki potrafi nie zwrócić nic — klasyczna zagadka „czemu pusto”.
Ukryte pliki znikają. Jeśli czegoś nie widzisz, dorzuć -Force. Bez niego elementy z atrybutem Hidden/System są niewidzialne, a Ty główkujesz, gdzie podział się plik.
Alias ls to nie Bash. W PowerShellu ls -la wywali błąd, bo -la nie jest flagą tej komendy. Przyzwyczajenia z Linuksa tu nie zadziałają.
Rekurencja po całym dysku bez -Depth i bez filtra potrafi mielić minutami i sypać błędami dostępu — ogranicz zakres.
Powiązane komendy: Set-Location (zmiana katalogu), Get-Item (pojedynczy element), Where-Object i Measure-Object (filtrowanie i podsumowania w potoku), oraz aliasy dir i ls.