Dosyalar, klasörler ve kayıt defteri anahtarlarıyla çalışma

Bu örnek yalnızca Windows platformları için geçerlidir.

PowerShell, bir PowerShell sürücüsünde bulunan öğelere başvurmak için Öğe adlı öğeyi kullanır. PowerShell FileSystem sağlayıcısıyla ilgilenirken, öğe bir dosya, klasör veya PowerShell sürücüsü olabilir. Bu öğeleri listelemek ve bunlarla çalışmak, çoğu yönetim ayarında kritik bir temel görev olduğundan, bu görevleri ayrıntılı olarak tartışmak istiyoruz.

Dosyaları, klasörleri ve kayıt defteri anahtarlarını numaralandırma

Belirli bir konumdan öğe koleksiyonu almak bu kadar yaygın bir görev olduğundan, Get-ChildItem cmdlet özel olarak klasör gibi bir kapsayıcıda bulunan tüm öğeleri döndürecek şekilde tasarlanmıştır.

Doğrudan klasörünün C:\Windowsiçinde yer alan tüm dosya ve klasörleri döndürmek istiyorsanız şunu yazın:

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

Liste, komutu içine veya ls UNIX komut kabuğuna dir girdiğinizde cmd.exegöreceğiniz gibi görünür.

Cmdlet'in Get-ChildItem parametrelerini kullanarak karmaşık listelemeler gerçekleştirebilirsiniz. Şunu yazarak cmdlet'in söz dizimini Get-ChildItem görebilirsiniz:

Get-Command -Name Get-ChildItem -Syntax

Bu parametreler, yüksek oranda özelleştirilmiş çıkış elde etmek için karıştırılabilir ve eşleştirilebilir.

Tüm kapsanan öğeleri listeleme

Hem Windows klasörünün içindeki öğeleri hem de alt klasörlerde yer alan öğeleri görmek için recurse parametresini Get-ChildItemkullanın. Liste, Windows klasöründeki her şeyi ve alt klasörlerindeki öğeleri görüntüler. Örneğin:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

Öğeleri ada göre filtreleme

Yalnızca öğelerin adlarını görüntülemek için name parametresini Get-Childitemkullanın:

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

Gizli öğeleri zorla listeleme

Dosya Gezgini gizli olan veya cmd.exe komutun Get-ChildItem çıkışında görüntülenmemiş öğeler. Gizli öğeleri görüntülemek için force parametresini Get-ChildItemkullanın. Örneğin:

Get-ChildItem -Path C:\Windows -Force

Komutun normal davranışını Get-ChildItem zorla geçersiz kılabildiğiniz için bu parametre Zorla olarak adlandırılır. Zorlama , bir cmdlet'in normalde gerçekleştirmeyebileceği bir eylemi zorlayan yaygın olarak kullanılan bir parametredir, ancak sistemin güvenliğini tehlikeye atabilecek herhangi bir eylem gerçekleştiremez.

Öğe adlarını joker karakterlerle eşleştirme

komutu, Get-ChildItem listelene öğelerin yolunda joker karakterler kabul eder.

Joker karakter eşleştirme PowerShell altyapısı tarafından işlendiğinden, joker karakterleri kabul eden tüm cmdlet'ler aynı gösterimi kullanır ve aynı eşleştirme davranışına sahiptir. PowerShell joker karakter gösterimi şunları içerir:

  • Yıldız işareti (*), herhangi bir karakterin sıfır veya daha fazla oluşumuyla eşleşir.
  • Soru işareti (?) tam olarak bir karakterle eşleşir.
  • Eşleştirilecek karakter kümesini sol köşeli ayraç ([) karakteri ve sağ köşeli ayraç (]) karakteri çevreler.

Joker karakter belirtiminin nasıl çalıştığına ilişkin bazı örnekler aşağıda verilmiştir.

Windows dizininde son eki .log ve temel adında tam olarak beş karakter bulunan tüm dosyaları bulmak için aşağıdaki komutu girin:

PS> Get-ChildItem -Path C:\Windows\?????.log

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

Windows dizinindeki harfle x başlayan tüm dosyaları bulmak için şunu yazın:

Get-ChildItem -Path C:\Windows\x*

Adları "x" veya "z" ile başlayan tüm dosyaları bulmak için şunu yazın:

Get-ChildItem -Path C:\Windows\[xz]*

Joker karakterler hakkında daha fazla bilgi için bkz . about_Wildcards.

Öğeleri dışlama

öğesinin Exclude parametresini Get-ChildItemkullanarak belirli öğeleri dışlayabilirsiniz. Bu, tek bir deyimde karmaşık filtreleme gerçekleştirmenizi sağlar.

Örneğin, System32 klasöründe Windows Zaman Hizmeti DLL'sini bulmaya çalıştığınızı ve DLL adı hakkında hatırlayabildiğiniz tek şeyin "W" ile başlayıp içinde "32" olduğunu varsayalım.

Gibi w*32*.dll bir ifade, koşulları karşılayan tüm DLL'leri bulur, ancak dosyaları daha fazla filtrelemek ve win32 dosyalarını atlamak isteyebilirsiniz. Exclude parametresini deseniyle win*kullanarak bu dosyaları atlayabilirsiniz:

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

    Directory: C:\WINDOWS\System32

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           3/18/2019  9:43 PM         495616 w32time.dll
-a---           3/18/2019  9:44 PM          35328 w32topl.dll
-a---           1/24/2020  5:44 PM         401920 Wldap32.dll
-a---          10/10/2019  5:40 PM         442704 ws2_32.dll
-a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
-a---           3/18/2019  9:44 PM          18944 wsock32.dll
-a---           3/18/2019  9:44 PM          64792 wtsapi32.dll

Get-ChildItem parametrelerini karıştırma

Aynı komutta cmdlet'in Get-ChildItem birkaç parametresini kullanabilirsiniz. Parametreleri karıştırmadan önce joker karakter eşleştirmeyi anladığınızdan emin olun. Örneğin, aşağıdaki komut hiçbir sonuç döndürmez:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

Windows klasöründe "z" harfiyle başlayan iki DLL olmasına rağmen sonuç yoktur.

Joker karakteri yolun bir parçası olarak belirttiğimiz için sonuç döndürülmedi. Komut özyinelemeli olsa da, Get-ChildItem cmdlet öğeleri Windows klasöründeki adlarla biten öğelerle .dllsınırlandırdı.

Adları özel bir desenle eşleşen dosyalar için özyinelemeli bir arama belirtmek için Include parametresini kullanın.

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll