Már használtuk a Get-Item és Get-ChildItem cmdleteket, de nézzük meg részletesebben is használatukat!
PS C:\> Get-ChildItem C:\PSKönyv
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014.06.30. 20:49 Normál mappa
----- 2014.06.30. 20:50 0 Archivált fájl.txt
-ar-- 2014.06.30. 20:49 0 Csak olvasható fájl.txt
-a--- 2014.06.30. 20:49 0 Normál fájl.txt
-a--- 2014.06.30. 20:50 0 Titkosított fájl.txt
-a--- 2014.06.30. 20:51 0 Tömörített fájl.txt
A fenti példában a PSKönyv mappában mindenféle fájlt és mappát hoztam létre, de listázásukkor csak a nem rejtettek láthatók alaphelyzetben. Ahhoz, hogy a rejtetteket is lássuk használjuk a –Force kapcsolót:
PS C:\> Get-ChildItem C:\PSKönyv -Force
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014.06.30. 20:49 Normál mappa
d--h- 2014.06.30. 20:49 Rejtett mappa
----- 2014.06.30. 20:50 0 Archivált fájl.txt
-ar-- 2014.06.30. 20:49 0 Csak olvasható fájl.txt
-a--- 2014.06.30. 20:49 0 Normál fájl.txt
-a-h- 2014.06.30. 20:49 0 Rejtett fájl.txt
-a--- 2014.06.30. 20:50 0 Titkosított fájl.txt
-a--- 2014.06.30. 20:51 0 Tömörített fájl.txt
Ha csak a mappákat szeretnénk látni, akkor PowerShell 2.0-ban sajnos Where-Object-el kell szűrnünk:
PS C:\> Get-ChildItem C:\PSKönyv | Where-Object {$_.psiscontainer}
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014.06.30. 20:49 Normál mappa
PowerShell 3.0 felett használhatjuk a beépített szűrőket, mint például -Directory:
PS C:\> Get-ChildItem C:\PSKönyv -Directory
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014.06.30. 20:49 Normál mappa
Sőt, itt használhatjuk a még általánosabb –Attributes paramétert is:
PS C:\> Get-ChildItem C:\PSKönyv -Attributes directory, hidden
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014.06.30. 20:49 Normál mappa
d--h- 2014.06.30. 20:49 Rejtett mappa
-a-h- 2014.06.30. 20:49 0 Rejtett fájl.txt
A fenti példában megkaptam a mappákat ÉS a rejtett objektumokat. Ha azt szeretném, hogy csak a rejtett mappákat kapjam meg, akkor a következő jelölést használhatom:
PS C:\> Get-ChildItem C:\PSKönyv -Attributes directory+hidden
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d--h- 2014.06.30. 20:49 Rejtett mappa
Tagadó jelleggel is lehet szűrni, például nem rejtett fájlok:
PS C:\> Get-ChildItem C:\PSKönyv -Attributes !ReadOnly+!Directory
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
----- 2014.06.30. 20:50 0 Archivált fájl.txt
-a--- 2014.06.30. 20:49 0 Normál fájl.txt
-a--- 2014.06.30. 20:50 0 Titkosított fájl.txt
-a--- 2014.06.30. 20:51 0 Tömörített fájl.txt
Ezzel a szűréssel az alábbi attribútumokra és azok kombinációjára kereshetünk:
ReadOnly, Hidden, System, Directory, Archive, Device, Normal, Temporary, SparseFile, ReparsePoint, Compressed, Offline, NotContentIndexed, Encrypted, IntegrityStream, NoScrubData
Ha egy adott mélységben keresem a fájlokat és mappákat, akkor –Path-nak ilyen kifejezést használhatok:
PS C:\> Get-ChildItem –Path C:\PSKönyv\*\*
Directory: C:\PSKönyv\Másik mappa
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014.06.30. 21:12 Ez egy mélyen levő mappa
-a--- 2014.06.30. 21:09 0 Ez egy fájl.txt
Directory: C:\PSKönyv\Normál mappa
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014.06.30. 21:10 0 Ez egy nem txt.fájl
-a--- 2014.06.30. 21:09 0 Ez is egy fájl.txt
Ha ezt szeretném szűrni TXT fájlokra, akkor használhatjuk a –Filter paramétert:
PS C:\> Get-ChildItem -Path C:\PSKönyv\*\* -Filter *.txt
Directory: C:\PSKönyv\Másik mappa
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014.06.30. 21:09 0 Ez egy fájl.txt
Directory: C:\PSKönyv\Normál mappa
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014.06.30. 21:09 0 Ez is egy fájl.txt
Ha olyan fájlokat keresek, amelyek NEM TXT kiterjesztésűek, akkor a –Filter paraméter helyett az ‑Exclude-ot használhatom. Ez (és az –Include paraméter) sajnos csak akkor működik megfelelően, ha a –Recurse, azaz tetszőleges mélységben keresünk:
PS C:\> Get-ChildItem C:\PSKönyv -Exclude *.txt -Recurse -Attributes !directory
Directory: C:\PSKönyv\Normál mappa
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014.06.30. 21:10 0 Ez egy nem txt.fájl
Előfordulhat, hogy a fájl nevében olyan speciális karakter van, amit a –Path paraméter speciális jelentéssel ruház fel. Például a következő kifejezéssel a minden olyan fájlt kilistázhatunk, aminek a neve Záró-val kezdődik és a „j”, „e”, „l”, „s” betű valamelyikével végződik:
PS C:\> Get-Item -Path C:\PSKönyv\záró[jeles].txt
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014.06.30. 21:22 0 Zárój.txt
-a--- 2014.06.30. 21:22 0 Zárós.txt
De mi van akkor, ha nekem pont van egy ilyen nevű fájlom? Ekkor jön jól a –LiteralPath paraméter:
PS C:\> Get-Item -LiteralPath C:\PSKönyv\záró[jeles].txt
Directory: C:\PSKönyv
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014.06.30. 21:18 0 záró[jeles].txt