Burada yoldan sapmışsın.
Zaten güzel, büyük bir hata mesajınız var. Neden her bir komuttan$? sonra açıkça kontrol eden bir kod yazmak istersiniz ? Bu son derece zahmetli ve hataya açık. Doğru çözüm, kontrolü durdurmaktır .$?
Bunun yerine, sizin için havaya uçmak için PowerShell'in yerleşik mekanizmasını kullanın. Hata tercihini en yüksek seviyeye ayarlayarak etkinleştirirsiniz :
$ErrorActionPreference = 'Stop'
Bunu yazdığım her senaryonun en üstüne koyuyorum ve şimdi kontrol etmem gerekmiyor $?. Bu, kodumu çok daha basit ve daha güvenilir hale getiriyor.
Bu davranışı gerçekten devre dışı bırakmanız gereken durumlarla karşılaşırsanız catch, hata yapabilir veya ortak olanı kullanarak belirli bir işleve bir ayar iletebilirsiniz -ErrorAction. Sizin durumunuzda, muhtemelen işleminizin ilk hatada durmasını, hatayı yakalamasını ve ardından günlüğe kaydetmesini istiyorsunuz.
Bunun, harici yürütülebilir dosyalar başarısız olduğunda (geleneksel olarak sıfırdan farklı çıkış kodu) durumu ele almadığını unutmayın; bu nedenle, $LASTEXITCODEherhangi birini çağırıp çalıştırmadığınızı yine de kontrol etmeniz gerekir . Bu sınırlamaya rağmen, ayar hala çok fazla kod ve çaba tasarrufu sağlıyor.
Ek güvenilirlik
Ayrıca katı modu kullanmayı da düşünebilirsiniz :
Set-StrictMode -Version Latest
Bu, var olmayan bir değişken kullandığınızda ve diğer garip durumlarda PowerShell'in sessizce ilerlemesini engeller. ( -VersionNeyi kısıtladığı hakkında ayrıntılar için parametreye bakın .)
Bu iki ayarı birleştirmek, PowerShell'i çok daha hızlı bir dil haline getirir ve bu da içindeki programlamayı büyük ölçüde kolaylaştırır.