PowerShell'de Test-Path cmdlet'i nasıl kullanılır?
PowerShell'de dosya veya klasörlerle çalışırken içerikleri okumaya veya kaydetmeye çalışmadan önce yolun var olup olmadığını test etmek önemlidir. Test-Path cmdlet'inin devreye girdiği yer burasıdır. Bir yolun tüm öğelerinin mevcut olup olmadığını kontrol eder ve $true veya $false değerini döndürür.
Artık PowerShell'deki Test-Path cmdlet'i yalnızca dosya ve klasörlerle sınırlı değil. Ayrıca kayıt defteri yolunu test etmek, bir dosyanın belirli bir tarihten daha yeni olup olmadığını test etmek ve bir yolun geçerli bir yol olup olmadığını doğrulamak için de kullanılabilir.
Bu makalede Test-Path cmdlet'inin nasıl kullanılacağına ve onunla yapabileceğiniz farklı seçeneklere bakacağız.
PowerShell Test Yolu
PowerShell Test-Path cmdlet'i kullanabileceğimiz farklı parametrelerle birlikte gelir. En sık kullanılan parametreleri aşağıda listeledim:
- -Path
Test etme yolu
- -Include
-
Dahil edilecek bir yol öğesini belirtir; örneğin *.txt
- -Exclude
Hariç tutulacak bir yol öğesini belirtir; örneğin *.txt
- -PathType
Bir yolun Kapsayıcı, Yaprak veya bunlardan herhangi biri olup olmadığını kontrol etmenizi sağlar
- -IsValid
Bir yolun geçerli bir yol olup olmadığını kontrol edin
- -OlderThan
Dosyanın belirtilen tarihsaat nesnesinden daha eski olup olmadığını kontrol edin
- -NewerThan
Dosyanın belirtilen tarihsaat nesnesinden daha yeni olup olmadığını kontrol edin
Dolayısıyla, bir yolun var olup olmadığını basitçe test etmek için yalnızca Yolu belirtmemiz gerekir ve cmdlet, yolun tüm öğelerinin mevcut olup olmadığına bağlı olarak $true veya $false değerini döndürecektir. ya da değil:
Test-Path -Path "c:\Temp\TestFiles"
# Result
TrueBunu komut dosyalarımızda şöyle basit bir if ifadesiyle kullanabiliriz:
$path = "c:\Temp\TestFiles"
if (Test-Path -Path $path) {
Get-ChildItem -Path $path
}PowerShell Dosyanın Var olup olmadığını kontrol edin
Bir dosyanın var olup olmadığını kontrol etmek için PowerShell'deki Test-Path'i de kullanabiliriz. Bunun için path parametresinde dosya adı da dahil olmak üzere tam yolu belirtmemiz gerekecek:
# Check if the file LineNumbers.txt exists
$file = "C:\Temp\TestFiles\LineNumbers.txt"
Test-Path -Path $file
# Result
TrueŞimdi, bu durumda, açıkça bir dosyayı kontrol ediyoruz çünkü uzantılı dosyayı da içeren tam yolu belirttik. Ancak yolun bir dosyaya mı yoksa klasöre mi gittiğini bilmiyorsanız PathType parametresini belirleyebilirsiniz.
Diyelim ki $profile dosyasının bir dosyayı işaret edip etmediğini bilmek istiyoruz. Bunun için PathType'ı Leaf olarak ayarladık:
# Check if $profile is a file:
Test-Path -Path $profile -PathType leaf
# Result
TruePowerShell, Klasörün Var olup olmadığını kontrol eder
Tıpkı bir dosyada olduğu gibi, PowerShell'de de bir klasörün olup olmadığını kontrol edebiliriz. Bunun için yalnızca klasörün yolunu belirtmemiz gerekiyor:
Test-Path -Path "c:\Temp\TestFiles"
# Result
TrueYolun bir klasöre işaret ettiğinden emin olmak istiyorsak -PathType parametresini ekleyip container olarak ayarlayabiliriz. Bu şekilde Test-Path cmdlet'i yalnızca yolun var olup olmadığını değil aynı zamanda bir klasör olup olmadığını da kontrol edecektir:
# Check if $profile is a folder:
Test-Path -Path $profile -PathType container
# Result
FalseKlasörün dosya içerip içermediğini öğrenmek istiyorsanız Get-ChildItem vb. ile sayım yapmanıza gerek yoktur. Basitçe Test-Path kullanabilir ve bir joker karakter * ekleyebiliriz. Verilen yolda dosya olup olmadığını kontrol etmek için komutunu kullanın:
# Check if there are files in the folder
Test-Path -Path "c:\Temp\TestFiles\*"
# Result
TrueDahil Et ve Hariç Tut'u kullanma
Bir klasörün belirli dosyalara sahip olup olmadığını test etmek istiyorsanız -include ve -exclude parametrelerini kullanabilirsiniz. Bu şekilde, bir klasörün belirli bir dosya türünü veya belirtilen dosya türü dışında herhangi bir dosyayı içerip içermediğini kontrol edebiliriz.
Örneğin, aşağıdaki yolda günlük dosyalarının olup olmadığını kontrol etmek istiyoruz:
# Check if the path contains .log files
Test-Path -Path "C:\Temp\TestFiles\*" -PathType leaf -Include *.log
# Result
False.log dosyası dışında herhangi bir dosya olup olmadığını test etmek istiyorsak, örneğin hariç tutmayı kullanabiliriz:
# Check if the path contains .log files
Test-Path -Path "C:\Temp\TestFiles\*" -PathType leaf -Exclude *.log
# Result
TrueBir yolun geçerli olup olmadığını test edin
Betiğinizde dinamik olarak bir yol oluşturduğunuzda, oluşturulan yolun geçerli bir yol olup olmadığını test etmek iyi bir fikir olabilir. Bunun için -IsValid parametresini kullanabiliriz. Bu, yolun var olup olmadığını kontrol etmez, yalnızca geçerli bir yol olup olmadığını kontrol eder.
Örneğin PATH sistem değişkenindeki tüm konumların geçerli yollar olup olmadığını kontrol edebiliriz:
$env:path -split ";" | Test-Path -IsValid
Ya da belki biraz daha kolay bir örnek:
$storage = "c:\temp\testfiles\"
$newFolder = "\LazyFolder"
$path = $newFolder + $storage # yes, the wrong way around
Test-Path -path $path -IsValid
# Result
FalseBir Dosya veya Klasörün Bir Tarihten Daha Yeni mi yoksa Eski mi Olduğunu Kontrol Edin
Bir yolun var olup olmadığını test etmenin yanı sıra, bir dosya veya klasörün belirtilen tarihten daha yeni veya daha eski olup olmadığını da kontrol edebiliriz. Bu, özellikle bir dosyanın güncellenip güncellenmediğini bilmek istiyorsanız kullanışlıdır.
-NewerThan ve -OlderThan parametreleri bir tarih veya tarihsaat nesnesi gerektirir. Bu bir tarihsaat dizisi veya verisaati nesnesi olabilir. Dolayısıyla, “testfiles” klasörünün Şubat ayının ilkinden daha yeni olup olmadığını test etmek için aşağıdakileri yapabiliriz:
Test-Path -Path "C:\Temp\TestFiles\" -NewerThan "01 feb 2023"
# Result
TrueAncak örneğin klasörün 3 günden eski olup olmadığını da kontrol edebiliriz. Bunun için önce PowerShell'de daha sonra Test-Path cmdlet'inde kullanabileceğimiz bir tarih nesnesi oluşturuyoruz:
# Get the date from 3 days ago
$date = (Get-Date).AddDays(-3)
# Test if the folder is newer
Test-Path -Path "C:\Temp\TestFiles\" -NewerThan $dateElbette aynısını OlderThan ile de yapabilirsiniz.
PowerShell ile Kayıt Defteri Yollarını Test Edin
PowerShell'deki Test-Path cmdlet'i, kayıt defteri yollarının mevcut olup olmadığını kontrol etmek için de kullanılabilir. Şimdi burada dikkat edilmesi gereken önemli bir husus var; kayıt girişlerini test edemiyor.
Aşağıdaki ekran görüntüsüne bakarsanız Outlook (1) anahtarının var olup olmadığını test edebiliriz. Ancak “OutlookName” (2) girişinin mevcut olup olmadığını test edemiyoruz.
Kayıt defteri anahtarını test etmek için yalnızca anahtarın yolunu şu şekilde belirtmemiz gerekir:
Test-Path -Path "HKCU:\Software\Microsoft\Office\16.0\Outlook"Aşağıdaki sonuçlarda görebileceğiniz gibi, Outlook anahtarının yolu mevcut ancak OutlookAdı girişinin yolunu bulamıyor:
Kapanış
Kaynakların mevcut olup olmadığını test etmek veya doğrulamak, herhangi bir programlama veya komut dosyası yazma dilinde önemlidir. Komut dosyalarınızdaki hataları veya beklenmeyen davranışları önlemenize yardımcı olur ve doğru hata işlemeyi yapmanıza olanak tanır.
PowerShell'deki Test-Path cmdlet'i çoğu kişinin düşündüğünden daha fazlasını yapabilir, ancak her durumda yalnızca doğru veya yanlış çıktısı verir.
Umarım bu makaleyi faydalı bulmuşsunuzdur, herhangi bir sorunuz varsa aşağıya yorum bırakmanız yeterli.


