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
True

Bunu 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
True

PowerShell, 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
True

Yolun 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
False

Klasö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
True

Dahil 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
True

Bir 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
False

Bir 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
True

Ancak ö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 $date

Elbette 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.

İlgili makaleler