Standart hatayı PowerShell'deki bir değişkene yönlendirme


16

Herhangi bir hata bulursa beni uyarmak için bir dcdiag testi komut dosyası istiyorum. Bunu PowerShell'de yapabileceğimi düşündüm ...

$test = dcdiag 2>$err

Şu anda dcdiag'dan herhangi bir hatam yok, bu yüzden doğrudan test edemedim, ancak bu komut dosyasını kullanarak bu yöntemi test edebilmeyi umarak bir istisna atmak için başka bir PowerShell betiği yazdım. Bu, yukarıdaki yöntemi kullanarak işe yaramadı, bu yüzden ben seçti:

try {
    $test = dcdiag
}
catch { 
    $err = $_.Exception.Message
}

Test durumum için çalıştı, ancak bunun dcdiag'dan standart bir hata alıp almayacağını bilmiyorum.

DCdiag ile kullanmak istediğim için PowerShell'de bir değişkene standart hata yönlendirmesini en iyi nasıl elde etmeliyim?

Yanıtlar:


18

try...catch bu durumda yardımcı olmaz.

Şunları yapmak isteyebilirsiniz:

$test = dcdiag 2>&1
$err = $test | ?{$_.gettype().Name -eq "ErrorRecord"}
if($err){
    # Error has occurred
}

3
Ah, orijinal soruda söylemedim; hem stdout hem de stderr tutmak mümkün mü? yani $ test = stdout ve $ err = stderr?
Aralık'ta

2
@Ablue - $testher ikisine de sahip olacak, bu yüzden hatayı filtreliyorum $err.
manojlds

1
$ ErrorActionPreference öğesinin "SilentlyContinue" olarak ayarlanmadığından emin olun. Hata olduğunda akış kullanılamaz.
cmcginty

@cmcginty aslında $ ErrorActionPreference "Devam" olarak ayarlanmalıdır.
Stentlyr

2
@Simon Doğru, SilentlyContinue KULLANMAYIN dedim.
cmcginty
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.