PowerShell: Dosya Arama

PowerShell: Dosya Arama

Powershell dosya arama

Bilgisayarımda bir dosya kaydettim ve bulamıyorum. Bunu bulmak için Windows PowerShell'i kullanmanın bir yolu var mı?

Elbette. PowerShell, gelişmiş arama seçenekleri sunar.

Dosya adını tam hatırlamıyorum ancak dosya adının bir kısmını hatırlıyorum. Bu tür arama yapmak için PowerShell kullanabilirmiyim?

Tabi ki de evet.

Bu yazımız, Get-Childitem komutunu kullanarak Powershell’de arama yapmayı ele almaktadır.

Bilgisayarınıza indirdiğiniz veya kaydettiğiniz dosyaları birkaç komut ile bulacaksınız. Powershell dosya arama açısından detaylı seçenekler sunar.

Get-Childitem komutu ile PowerShell Dosya Arama

Get-Childitem komutunun kullanımı olası senaryolar ile örneklendirilerek işlenecektir.

PowerShell: Dosya Arama

Get-Childitem

Dosya veya klasörlerin listesini göstermek için Get-Childitem ‘i kullanabiliriz. Aşağıdaki örnekte, C: sürücüsünün kökünde ki tüm dosyalar listelenir;

Get-Childitem –Path C:\

ve bu koda -Recurse parametresi eklenirse tüm alt klasörler de dahil edilerek listenir.

Get-Childitem –Path C:\ -Recurse

Buraya kadar ki anlattıklarımıza bakacak olursak CMD (Komut Satırı) ‘de ki dir komutundan bir farkı yok diyebilirsiniz.

Dir C:\*.* /s

Öyleyse neden PowerShell?

PowerShell dosya aramalarında, başlık altında görmediğimiz her şeyi bize sunar.

Klasör yapısından kaynaklanan gerekli izinlerin olmadığı bir bölüm ile karşılaşınca uyarı verir ve arama kesilir. Böyle bir durum da hataların görmezden gelinip aramaya devam etmesi için ise bu kod kullanılır, kodun anlamı “bana küçük hataları gösterme zahmetine girme, sadece devam et” demektir;

Get-Childitem –Path C:\ -Recurse -ErrorAction SilentlyContinue

Peki bunu bir arama aracı olarak nasıl kullanırız? Get-Childitem iki ek parametre içerir: -include ve –exclude. İşlevleri oldukça basittir.

include parametresi, “Sadece bu dosyaları aramada göster” ve

-exclude parametresi de, “Bu şeyleri yolumdan uzak tut.” anlamlarını taşıyor.

Geçici gizli klasörlerin de aramaya dahil olması için -force kodu kullanılır.

Get-Childitem –Path C:\ -Recurse –force -ErrorAction SilentlyContinue

Şimdi bir örnek yapalım, C: dizini içinde “ava” geçen tüm klasör ve dosyalar listelensin;
Get-Childitem –Path C:\ -Include *ava* -Recurse -ErrorAction SilentlyContinue

Powershell dosya arama

Klasör isimlerini istemiyorum, sadece dosyaları bulsun diyorsanız -file kodunu kullanmalısınız;

Get-Childitem –Path C:\ -Include *ava* -File -Recurse -ErrorAction SilentlyContinue

JPG resim dosyaları, MP3 müzik dosyaları ve TMP geçici dosyalarını hariç tutmak için;

Get-Childitem –Path C:\ -Include *ava* -Exclude *.JPG,*.MP3,*.TMP -File -Recurse -ErrorAction SilentlyContinue

Olayı kavramış ve konuya yavaştan hakim olduk sanırım =)

Şimdi senaryoyu biraz büyütelim hafif zorlaştıralım.

Diyelim ki haftasonu tatilindesiniz. Cuma günü bir word belgesi üzerinde çalışmıştınız. Güzel bir haftasonu geçirdiniz. Pazartesi günü ise bahsi geçen dosyayı bulamıyor hatta adını bile hatırlamıyorsunuz. Bu durumda tarihe göre filtre uygulayabiliriz. Cuma günü için tarih 14/12/2018 olsun.

Bunu yapmanın farklı yolları mevcut ancak ben uygunluk ve global oluşundan dolayı Get-Date komutunu kullanarak dosyayı bulmaya çalışacağım.

İlk olarak tarihi yıl ay gün olarak cuma günü için tanımlayalım.

$FindDate=Get-Date -Year 2018 -Month 09 -Day 14

Where-Object komutu yardımıyla tanımlanan tarihte dosyanın “yazıldığı son tarih olan LastWriteTime özelliğini kullanarak tespit edebiliriz.

Get-ChildItem -Path C:\ProgramData\USOShared\Logs -Include *.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $FindDate }

Powershell dosya arama

Alternatif olarak AddDays() parametresi ile de sadece o günü arattırabilirsiniz.

Get-ChildItem -Path C:\ -Include *.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $FindDate -and $_.LastWriteTime -le $Finddate.adddays(1) }

Başka bir senaryo olarak onlarca hatta yüzlerce sonuç içeren dosyalarınız varsa bu sonuç listesini CSV veya metin dosyası olarak kaydedebilirsiniz. Bunun için Select-Object ve Export-Csv parametreleri kullanılır. C: klasörüne BulunanDosyalar.txt olarak arama sonucunu kaydetsin;

Get-ChildItem -Path C:\ -Include *.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $FindDate } | Select-Object Name,Directory | Export-Csv c:\BulunanDosyalar.txt -Encoding UTF8 -nti -append

Umarım ki bu bilgiler işinize yaramıştır ve PowerShell dosya aramalarınızı güçlendirmiştir.

Bilgi Kaynağı: https://blogs.technet.microsoft.com/heyscriptingguy/2016/06/27/use-windows-powershell-to-search-for-files/

Paylaş
1 Yıldız2 Yıldız3 Yıldız4 Yıldız5 Yıldız (Bu yazıyı oylamak ister misiniz?)
Loading...

Kullanıcı Yorumları (Cevap Yok )

Henüz yorum yok.