İlan

Adından da anlaşılacağı gibi, PowerShell standart Windows komut isteminden çok daha güçlüdür. Bu güç ile hataları karıştırmak daha büyük bir olasılık gelir. Betiğiniz aniden başarısız olursa, neyin yanlış gittiğini aramaya nereden başlayacağınızı bilemeyebilirsiniz. PowerShell’in hata yönetimi burada işe yarar.

Diğer dilleri biliyorsanız, muhtemelen hata işlemenin temellerini biliyorsunuzdur, ancak PowerShell'e özgü bilmeniz gereken bazı yönler vardır. PowerShell'de hata işlemede dört bölüm vardır: Hata Eylemi parametresi, Dene / Yakala blokları, Hata Değişkeni parametresi ve günlük.

Kolay Yolu İşleme PowerShell Hatası

PowerShell hatalarını ele almanın ilk adımı, komut dosyanızı parçalarında durduran bir şeyle uğraşmaktır. Hata betiğinizin geri kalanını etkilemezse, PowerShell'e hataları yoksaymasını ve devam etmesini söylemeniz en iyisi olabilir.

Öte yandan, belirli bir cmdlet'in bir sonlandırma hatası attığı her zaman açık değildir. Bazı cmdlet'ler bir hata döndürür, ancak komut dosyanızı durdurmaz. Bu, betiğinizin saçmalık verirken tamamlanmasını beklemenize neden olabilir.

İşte burada -ErrorAction parametresi gelir. Bir cmdlet'i hatayı istediğiniz gibi işlemeye zorlamak için bunu kullanın. Varolan bir komut dosyasını değiştiriyorsanız, cmdlet satırının sonuna eklersiniz.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Durdurma

Açıkçası, eğer kullanıyorsanız Get-ChildItem cmdlet kendi başına, bu hata sizin için fazla bir şey yapmaz. Ancak, verilerle herhangi bir şey yapmak istiyorsanız, komut dosyasını durdurmak iyi olur, bu nedenle aramanın başarısız olduğunu ve nedenini biliyorsunuz. Alternatif olarak, birden çok arama yapıyorsanız, parametreyi Dur için SilentlyContinue, arama başarısız olursa komut dosyası devam eder. Hatanın ne olduğunu görmek istiyorsanız, Devam et parametre olarak.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Sessizce Devam Et

Komut dosyanız her çalıştığında ne olacağını kontrol etme seçeneğini tercih ederseniz, bunu Sormak. Cmdlet'iniz bir pürüzle çarptığında, seçenekler sunar: Evet, Herkes İçin Evet, Durdurma Komutu, askıya almakveya Yardım.

ErrorAction kullanarak basit PowerShell hata işleme

Bu seçenek biraz daha esnektir, ancak hatalar komut dosyanızın girişinizi beklemesine neden olduğu anlamına gelir. Kullanıyorsanız sorun yok E-posta göndermek için PowerShell Windows PowerShell Kullanarak E-posta GöndermeGeeky way adresine bir e-posta göndermek ister misiniz? Windows PowerShell ile nasıl e-posta gönderebileceğiniz aşağıda açıklanmıştır. Daha fazla oku ya da başka basit bir görev olabilir, ancak bir gecede uzun bir işlem yürütürken istediğiniz bir şey olmayabilir.

Güçlü Yoldan İşlemede PowerShell Hatası

ErrorAction parametresi hatalarınızı karmaşık olmayan bir şekilde ele alır. Bununla birlikte, hatalar üzerinde biraz daha fazla kontrol arıyorsanız, PowerShell hala sizi kapsamaktadır. kullanma Deneyin / Yakala, cmdlet'ler bir hata döndürdüğünde artık komut dosyasını dallayabiliriz.

Try / catch kullanarak PowerShell'de hata işleme

Adından da anlaşılacağı gibi, Deneyin / Yakala iki bölümden oluşmaktadır. (Teknik olarak üçüncüsü var, ama bir dakika içinde buna ulaşacağız.) Birincisi Deneyin Bölüm. Bu bölümde normal kodunuzu çalıştıracaksınız. Hâlâ -ErrorAction parametresidir, ancak yalnızca şu şekilde ayarlanabilir Dur. Bu bayrak cmdlet'inizin Tutmak—Bir sonlandırma hatası yoksa bile.

{Get-Process "Cortana" -ErrorAction Durdurmayı deneyin. }

Arama başarısız olursa, diğer cmdlet'lerin çalışmasını da engelleyebilirsiniz. Bu durumda, Get-Process sonuç Dur-Süreci, başarısız bir arama ikinci cmdlet'in çalışmasını önler.

Şimdi cmdlet'leri bir deneme bloğu oluşturduğunuza göre, başarısız olduğunda ne yapmak istiyorsunuz? Kullanmak Tutmak yarısı, bunu tanımlayacaksınız.

{Write-Host "İşlemi Bulunamadı" }

Olduğu gibi ErrorAction parametresi, biraz daha karmaşık bir şey yaptığınızda Tutmak özellikle basit bir dil hatası vermekten daha fazlası için yararlı olacaktır biraz daha karmaşık bir şey yaptığınızda. (Yukarıdaki örnekte, işlem adı değil uygulama adı kullanılarak hata zorlanmıştır.) Bu nedenle, Deneyin bir arama / eylem oluşturmak için engelle. Kullanabilirsiniz Tutmak betiğinizin başarısız olması durumunda size e-posta göndermesini engelleyin.

Üçüncü bölüm, cmdlet'inizin başarılı olup olmamasına bakılmaksızın bir şeyin çalışmasını istiyorsanız kullanışlı olur. Bunun için, En sonunda blok. Bunu deneyin ve yakalayın sonra ekleyin ve komut dosyanızın bir bölümü sona erdiğinde günlüğe kaydedin.

Hata Değişkeni ve Günlüğe Kaydetme

Komut dosyanız artık hataları nasıl ele alacağını ve bunlara nasıl yanıt vereceğini kontrol ediyor. Zamanlanmış bir görev olarak kullanabilir veya en azından masanızda olmadığınızda çalıştırabilirsiniz. Ancak, başarısız bir komut dosyasını nasıl araştırabilirsiniz? İle -ErrorVariable cmdlet’inizin hatalarını özel bir değişkene yazın.

Bu sisteme bir alternatif $ Hata Geçerli oturumdaki tüm hataları içeren değişken.

Cmdlet'inizin biraz daha uzun olması gerekiyor. İlk olarak, bir değişken tanımlayın. $ SearchError örnek için yapacak. Aradığın zaman SearchError içinde ErrorVariable dolar işareti kullanmazsınız.

Oluşturduğunuz bir değişkeni çağırsanız bile, parametrenin çalışma şekli nedeniyle dolar işareti olmadan çağırırsınız. Sonra bunu satırın sonuna ekleyin.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Devam -ErrorDeğişen SearchError

Eğer bir + değişken adının önünde, değişkeni doğrudan değiştirmek yerine ekleyebilirsiniz. Bu, genel hata değişkeniyle aynı davranışı sağlar. Bunun yerine, bu çıktıyı kullanabilirsiniz ve Deneyin / Yakala özel çıktı yazmak ve zaman damgası.

PowerShell hata günlüğü

Bunu yapmak için, hata değişkenini ayarladıktan hemen sonra bir metin dosyası oluşturun. Bunu Yeni öğe cmdlet. Şunu kullanmak isteyebilirsiniz: Sormak için seçenek ErrorAction parametre. Bu, mevcut bir günlüğe Yeni öğe cmdlet başarısız.

$ SearchLog = Yeni Öğe "~ \ SearchLog.txt" -tipi dosya -ErrorAction Sorgula

Şimdi, Deneyin / Yakala blok, kullanabilirsiniz Tutmak metin dosyasına giriş yapmak için. Kullan Get-Tarih zaman damgası oluşturmak için. Biçimlendirme zor olabilir, bu yüzden bunu örnekten kopyaladığınızdan emin olun.

{Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError öğesini deneyin. } {Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format gg-AA-yy-hh_mm_ss) Catch bulunamadı döndürülen hata: $ SearchError" }

Bunu tüm cmdlet'leriniz için gerektiği gibi tekrarlayın ve şimdi herhangi bir hata için güzel bir günlüğünüz var. Başarılı bir şekilde çalışan şeyleri izlemek istiyorsanız, benzer bir şey ekleyebilirsiniz. Eklenti İçerik sonunda Deneyin blok.

Bu günlük kaydı yalnızca Deneyin cmdlet başarılı. Daha sonra hatalarınızı ve başarılarınızı zaman damgalarıyla kaydedebilirsiniz. Günlüğe kaydetme artık betiğinizin yaptığı her şeyi, başarılı veya başarısız olduğunu bilmenizi sağlar.

PowerShell Tek Seçenekiniz Değil

PowerShell, birçok Windows görevi için kullanışlı bir araç olsa da, öğrenmesi zor olabilir. Ayrıca her şey için uygun değildir. Bilgisayarınızda sistem bakımı yapıyorsanız veya bir dosyanın bütünlüğünü kontrol etme, PowerShell kullanışlıdır. Öte yandan, internetten dosya indirmek veya daha genel bir görev için bir komut dosyası çalıştırmak istiyorsanız, başka seçenekleriniz de vardır.

Örneğin, bir Unix veya Linux arka planından geliyorsanız, bash kabuğunu kullanmak daha rahat olabilir. Linux için Windows Alt Sistemi sayesinde, artık Windows 10 bilgisayarınızda bash ve diğer Linux araçlarını kolayca kullanabilirsiniz. Bu size mükemmel geliyorsa, kılavuzumuzdan başka bir yere bakmayın. Windows 10'da bash kabuğunu çalıştırma Windows 10'da Linux Bash Kabuğu Nasıl AlınırFarklı bir PC'ye geçmek veya VM çalıştırmak için Linux'u zaman kullanmaya mı ihtiyacınız var? Windows 10'da Linux'u Bash kabuk terminaliyle çalıştırın! Daha fazla oku .

Kris Wouk bir yazar, müzisyen ve birisi web için video çektiğinde ne denir.