PowerShell: Yakalama hataları ancak döngü olmadan devam?

oy
0

Ben PowerShell ile oldukça iyiyim düşünmek istiyorum, ama biraz burada şaşkına değilim.

O bana ait analiz kaçıyorum bazı gerekli dosya bilgilerini verecektir üzerine ben bu kodu çalıştırmak için gidiyorum dosyaların DEV listesi var. Birinci adım, sadece dosya listesini oluyor. Bu yüzden bu çalıştırın.

Get-ChildItem $path -Recurse

Bu yararsız bilgi bir grup döndürür ANCAK o da bana kırmızı bir deniz verir. bulundu ve açıkça beni inkar edilemez dosya ve klasörlerin ton var. Benim bağırsak duygu deneme / yakalama kullanmak söylüyor yüzden, ilgili bilgilere onları ayrıştırmak böylece bu hataların hepsi yakalamak istiyorum.

Normalde döngünün bir döngü bir yerde dışarıdan dahilinde / mağaza hata mesajları Catch deneyin kullanın ve bu harika çalışıyor. Ama aslında Devam için bir döngü yok. Şimdi ne yapacağını emin değilim. İşte sahip kaynak kodu var.

function Get-FileInfo {
    Param(
        [Parameter(Mandatory=$True,Position=0)]
        [ValidateNotNull()]
        [string]$path
    )

    $global:errorInfo = @()
    Write-Host I started!

    Try {
        Write-Host I started the Try Statement!
        $fileInfo = Get-ChildItem $path -Recurse -ErrorAction Stop
        Write-Host I finished the main pull!
        Return $fileInfo
    }

    Catch {
        Write-Host I started the Catch Statement!
        $errorObj = New-Object PSObject
        Add-Member -inputObject $errorObj -memberType NoteProperty -name “Type” -value $_.Exception.Message
        Add-Member -inputObject $errorObj -memberType NoteProperty -name “Item” -value $_.Exception.ItemName
        $errorInfo += $errorObj
        Continue
    }

}

Ben sorunu görmek eminim. Ben kaçınılmaz deneyin blok içinde meydana gelecek hataları yakalamak istediğiniz, ama aslında bir döngü yok. Gerçekten iyi şeyler yapmak için bir döngü gibi, bu nasıl kurulacağı görmüyorum.

Bu kodu çalıştırırsanız, o Ben Başladı! Yazacak ve daha sonra hemen sonra Ben deneyin Bildirimi başladı. Sonra bir yaklaşık dakika çalışacaktır. Sonra Ben Catch ifade başladı! Bir olsun ve hemen sona erer. O bunun neden böyle mantıklı ama o besbelli amaçlanan sonuç değil.

Sadece bu yanlış düşünmeye muyum?

Oluştur 03/12/2019 saat 00:06
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Tarif ettiğiniz hatalardır olmayan sonlandırma Eğer bir değişkendeki toplayabilir hatalar, ortak -ErrorVariableparametre (ne ilk hata komutu durdurmadan, -ErrorAction Stopyapar).

# Silence non-terminating errors and collect them in variable $errs
Get-ChildItem $path -Recurse -ErrorAction SilentlyContinue -ErrorVariable errs
  • Not nasıl hedef değişken adı errsbelirtilmelidir olmadan$ sen değişkenin geçiriyorsanız beri, isim , değil onun değer. $errsBir şekilde oluşturulur yerel değişken.

    • Bu kapsam sınırları ötesinde değişkenleri ayarlayarak önlemek için genellikle daha iyidir, ama olduğu bir değişkeni hedeflemek mümkün komut kapsamı / küresel yani ile yerine kapsam
      -ErrorVariable script:errs/-ErrorVariable global:errs
  • Ayrıca etmek susturmaya hataları, kullanım -ErrorAction SilentlyContinue, değil -ErrorAction Ignore- ikincisi yapım tamamen hatalarını engellemek olacaktır $errsboş.

Cevap 03/12/2019 saat 00:27
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more