W dzisiejszym wpisie pokażę wam jak posłużyć sie PowerShellem w celu wyszukiwania plików. W następnym wpisie pokażę jak przeszukiwać zawartość plików w celu wyszukania konkretnej frazy.
Posłużymy się tutaj poleceniem Get-ChildItem, lub jak ktoś woli na skróty to gci. Ogólnie mówiąc ten cmdlet służy do listowania obiektów wewnątrz podanej lokalizacji. Tą lokalizacją może być system plików czy rejestr.
Najprostszym przykładem wykorzystania Get-ChildItem będzie:
1 |
Get-ChildItem C:\Temp |
Ta komenda wylistuje nam wszystkie pliki znajdujące się bezpośrednio w folderze temp. Jeśli zależy nam aby przeszukać też foldery znajdujące się wewnątrz aktualnego folderu wystarczy dodać parametr -Recurse. Używając jednak wyszukiwania rekursywnego należy się spodziewać, że w którymś z folderów będziemy mieli zbyt małe uprawnienia i wtedy zamiast listy plików otrzymamy błąd. Aby tego uniknąć wystarczy dodać parametr obsługujący błędy. Całość polecenia będzie wyglądała tak:
1 |
Get-Childitem –Path C:\temp -Recurse -ErrorAction SilentlyContinue |
Uruchamiając to polecenie, w przypadku gdy pojawi się problem, skrypt nie wygeneruje wiadomości z błędem i będzie kontynuował działanie.
A jak zatem wyszukać pliki o konkretnej nazwie czy z konkretnym rozszerzeniem ?
Jeśli dodamy parametr -Recurse to przeszukamy wszystkie foldery wewnątrz folderu w którym jesteśmy aktualnie.
Mamy też możliwość użycia parametrów -Include oraz -Exclude. Include działa podobnie jak -Filter.
Zgodnie z dokumentacją jeśli nie dodamy * w parametrze -Path tak jak w przykładzie lub gdy parametr wskazuje na konkretną ścieżkę: -Path C:\Temp\* komenda nie wyświetli żadnych wyników. Jeśli używamy parametry -Recurse wtedy * jest opcjonalna.
1 2 3 |
PS C:\Temp> Get-ChildItem -Include *.txt PS C:\Temp> Get-ChildItem * -Include *.txt |
Teraz pokażę jak filtrować wyniki wyłączając pewne pliki z wyników wyszukiwania. Na początek wyszukamy pliki ale tak aby w wynikach nie były uwzględnione pliki txt.
1 |
Get-ChildItem -Exclude *.txt |
Poniżej przedstawię również jak odfiltrować pliki zaczynające się na literę „t”.
1 |
Get-ChildItem * -Exclude t* |
Tak jak wspominałem wyżej, Get-ChildItem można również użyć do przeszukiwania rejestru.
1 |
Get-ChildItem -Path HKLM:\SOFTWARE |