PowerShell Try Catch Finally Kullanımı
PowerShell Hata Yakalama, PowerShell İstisna Yönetimi, PowerShell Exception Handling, PowerShell Exception Management, PowerShell Hata Yönetimi, PowerShell Trap Kullanımı
PowerShell Try Catch Finally Kullanımı
Powershell kod bloklarındaki hataların bulunup işlenmesi, hataya göre işlem yapılması gerektiğinde, PowerShell Try, Catch ve Finally blokları kullanılır.
PowerShell hataları bir şekilde işleyemediğinde çalıştırmayı da durdurur. PowerShell bir şekilde hatayı işlemezse, PowerShell komutu veya script geçerli ardışık düzen kullanarak çalıştırmayı da durdurur. C# gibi diğer dillerde, bu hatalar istisna (exception) olarak adlandırılır.
PowerShell Try Kullanımı
Try bloğu, script dosyasında PowerShell de hataların izlemek istenilen bölümüdür. Bu blokta bir hata oluştuğunda, ilk önce otomatik olarak $Error değişkeninde saklanır. Bundan sonra, PowerShell işlemek için Catch bloğunu arar.
Try Sözdizimi
Aşağıda Try sözdizimi gösterilmektedir:
Try { Kod-1 Kod-2 Kod-N }
PowerShell Catch Kullanımı
Catch bloğu, komut dosyasında Try bloğu tarafından oluşturulan hataları işleyen bölümdür. Catch bloğu tarafından hangi hata türünün işleneceğini tanımlanabilir. Bir hata türü, Microsoft .NET framework istisnasıdır. Bir Try bloğunun farklı hata türleri için birden fazla catch bloğu olabilir. Catch bloğu yerine, hataları işlemek için Trap bloğu da kullanılabilir.
Catch Sözdizimi
Aşağıda PowerShell catch bloğunun sözdizimi gösterilmektedir:
Catch [[<error tip>][',' <error tip>]*] { Kod-1 Kod-2 Kod-N }
Hata yani error türleri köşeli parantezler içinde görülebilir. En dıştaki parantez elemanın isteğe bağlı olduğunu gösterir. Yukarıdaki sözdiziminde, catch anahtar sözcüğünü, isteğe bağlı bir hata türü listesi ve bir komut listesi izler. Herhangi bir catch yakalandığında, catch bloğundaki kodlar yürütülür.
PowerShell Finally Kullanımı
PowerShell finally bloğu, catch bloklarından sonra tanımlanır ve script içinde hata olsa da olmasada çalıştırılacak olan bloktur.
Finally Sözdizimi
Aşağıda finally bloğu sözdizimi gösterilmektedir:
Finally { Kod-1 Kod-2 Kod-N }
Örnekler
Örnek 1:
Aşağıdaki örnek, Try bloğuyla yalnızca bir Catch bloğu kullanır:
Try { Get-ChildItem } Catch { Write-Host -ForegroundColor DarkRed -BackgroundColor White "Hata Oluştu!" }
Bu örnekte, Try bloğundaki komut doğrudur. Bu nedenle herhangi bir hata yoktur ve aşağıdaki çıktıyı görüntüler:
Directory: C:\Users\ahmet Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r--- 12/22/2019 16:57 3D Objects d-r--- 12/22/2019 16:57 Contacts d-r--- 2/8/2020 14:28 Desktop d-r--- 1/31/2020 15:07 Documents d-r--- 2/8/2020 14:26 Downloads d-r--- 12/22/2019 16:57 Favorites d-r--- 12/22/2019 16:57 Links d-r--- 12/22/2019 16:57 Music d-r--- 1/19/2020 13:22 OneDrive d-r--- 1/1/2020 11:48 Pictures d-r--- 12/22/2019 16:57 Saved Games d-r--- 12/22/2019 16:57 Searches d-r--- 12/22/2019 18:56 Videos
Örnek 2:
Aşağıdaki örnek, Try bloğuyla yalnızca bir Catch bloğu kullanır:
Try { Get-ChildItem } Catch { Write-Host -ForegroundColor DarkRed -BackgroundColor White "Hata Oluştu!" }
Bu örnekte, komut try bloğundaki komut yanlış ve try bloğunda bir hata oluşuyor. Bu nedenle, çıktıyı catch bloğundan alınacaktır:
Hata Oluştu!
Örnek 3:
PopwerShell Catch kullanımı anlatılırken birden fazla Error tipi ve buna bağlı Catch bloğu tanımlanabileceği söylenmişti. Aşağıdaki örnekte Try, Catch, Finally kullanımı özetlenmiştir:
Try { Get-Child } Catch [System.Management.Automation.CommandNotFoundException] { Write-Host -ForegroundColor DarkRed -BackgroundColor White "Komut Bulunamadı!" } Catch { Write-Host -ForegroundColor DarkRed -BackgroundColor White "Başka Hatalarda Oldu!" } Finally { Write-Host -ForegroundColor DarkBlue -BackgroundColor White "Çalışma Tamamlandı." }
Aşağıdaki şekilde çıktı alınacaktır:
PS C:\Users\ahmet> Try { Get-Child } Catch [System.Management.Automation.CommandNotFoundException] { Write-Host -ForegroundColor DarkRed -BackgroundColor White "Komut Bulunamadı!" } Catch { Write-Host -ForegroundColor DarkRed -BackgroundColor White "Başka Hatalarda Oldu!" } Finally { Write-Host -ForegroundColor DarkBlue -BackgroundColor White "Çalışma Tamamlandı." } Komut Bulunamadı! Çalışma Tamamlandı. PS C:\Users\ahmet>
PowerShell Trap Kullanımı
PowerShell Trap anahtar sözcüğünü kullanarak, yine bir hata oluştuğunda çalışacak bir komut – ifade listesi belirlenebilir. PowerShell trap ifadeleri, hataları işler ve durdurmak yerine script veya komutun yürütülmesine izin verir.
PowerShell Trap anahtar kelimesinin sözdizimi aşağıdadır:
Trap [[<error tipi>]] { <komut listesi> }
PowerShell Trap Kullanımı Örnekler
Örnek 1:
Aşağıdaki fonksiyonda trap ile tüm hataların yakalanması gösterilmiştir:
function Get-Eth { Trap {Write-Output "Bir hata oluştu!"} Get-NetAdapters }
Çıktı:
Bir hata oluştu!
Örnek 2:
Ayrıca $_
kullanarak trap tetikleyen hata görüntülenebilir:
function Get-Eth { Trap {Write-Output "Bir hata oluştu!: $_"} Get-NetAdapters } Get-Eth
Çıktı:
Bir hata oluştu!: The term 'Get-NetAdapters' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Örnek 3:
Aşağıdaki örneklerde spesifik hataların yakalanması gösterilmiştir:
function Get-Eth { Trap {Write-Output "Bilinmeyen Bir Hata Oluştu: $_"} Trap [System.Management.Automation.CommandNotFoundException]{ Write-Output "Komut Bulunamadı: $_"} Get-NetAdapters } Get-Eth
Çıktı:
Komut Bulunamadı: The term 'Get-NetAdapters' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
function Get-Eth { Trap {Write-Output "Bilinmeyen Bir Hata Oluştu: $_"} Trap [System.Management.Automation.CommandNotFoundException]{ Write-Output "Komut Bulunamadı: $_"} Get-NetAdapter -Virtual } Get-Eth
Çıktı:
Bilinmeyen Bir Hata Oluştu: A parameter cannot be found that matches parameter name 'Virtual'.
PowerShell Try Catch Finally Kullanımı ve PowerShell Trap Kullanımı
Bu makalede PowerShell Try Catch Finally kullanımı ve PowerShell Trap kullanımı üzerinde duruldu. Soru ve önerilerinizi aşağıdaki formu kullanarak bize iletebilirsiniz.