Powershell istisnaları (exceptions) uzun konu. Doğrudan söylemek istediğime geleyim. Bir web sayfasına bağlantı yapmaya çalışıyorum, Invoke-WebRequest ile. Bu cmdlet'i bir try-catch bloğuna koyuyorum.
catch ile aslında burada olabilecek bütün istisnalar için bir yakalama yaptım. Ama her istisna durumu için ayrı ayrı işlem yapılacaksa bu istisna durumlarını ayrı ayrı incelemek gerekebilir. Örneğin Forbidden (403) dönen bir HTTP response durumu için bir eylemde bulunmak istiyorsak
ile System.Net.WebException sınıfı istisna yakalayabilirim. Peki olası bütün istisnaları nasıl öğrenebilirim?
Öncelikle $_ değişkeni catch bloğuna özel, son istisna. $Error değişkeni, mevcut oturumda oluşan bütün istisnaların dizisi. En son istisnaya $Error[0] ile ulaşılabilir. $err ise $Error için bir alias.
Bir istisnanın türünü anlamak için catch bloğunun içinde GetType() kullanılabilir.
Bu, Forbidden (403) durumunda
System.Net.WebException
döndü. Meşhur sıfır ile bölünme durumu istisnası için
System.Management.Automation.RuntimeException
döndü.
Daha iyi bir örnek Powershell yardım sitesinden bulunabilir:
Burada klasör ve dosya bulunamaması durumları için bir işlem, giriş/çıkış işlemi hataları için başka bir işlem yapılmış. En sonunda da bu iki sınıfa da dahil olmayan işlemler için bir genel yakalama yapılmış.
Daha da iyisi yapılarak istisnaların büyük bir listesi oluşturulmuş.
 
Hiç yorum yok:
Yorum Gönder