PowerShell: a hibákat, de továbbra is anélkül, hogy hurok?

szavazat
0

Szeretném azt hinni, én vagyok elég jó a PowerShell, de én egy kicsit zavarba itt.

Van egy hatalmas fájlok listáját, hogy fogok futni ezt a kódot, hogy ad nekem néhány szükséges fájl információt, hogy fogok futni Analytics. Első lépés csak egyre a fájl listát. Szóval futtatásához.

Get-ChildItem $path -Recurse

Ez visszaad egy csomó felesleges információ, de ez is ad nekem tengerében piros. Van tonna fájlok és mappák nem találhatók, és kifejezetten megtagadják én. Azt akarom, hogy az összes fogást az ilyen hibák, így tudok feldolgozni őket, hogy a vonatkozó információkat, így az én érzésem azt súgja, hogy használja try / catch.

Normális használja try / catch tárolására hibaüzenetek belül a hurok, odakünn a hurok, és remekül működik. De valójában nem is egy hurkot, hogy továbbra is. Nem tudom, most mit kell tennie. Itt a forráskód van.

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
    }

}

Biztos vagyok benne, hogy a kérdés. Szeretném megragadni a hibák elkerülhetetlenül előfordulnak a try blokkban, de valójában nem is egy hurok. Nem igazán látni, hogyan kell ezt beállítani, mint egy hurok jobbá tenni a dolgokat.

Ha ezt a kódot, akkor írjon „I Started!” majd „Elkezdtem a Try nyilatkozat” után szinte azonnal, hogy. Akkor fog működni körülbelül egy percig. Aztán kap egy „Elkezdtem a fogási nyilatkozatot!” és azonnal véget ér. Logikus, hogy miért történik, de ez nyilvánvalóan nem a kívánt eredményt.

Én csak gondoltam ez a baj?

A kérdést 03/12/2019 00:06
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

A hiba, amit leírja a véget nem érő hibákat, amelyek gyűjthetünk egy változót a közös -ErrorVariableparaméter , megállás nélkül a parancs az első hiba (ami -ErrorAction Stopnem).

# Silence non-terminating errors and collect them in variable $errs
Get-ChildItem $path -Recurse -ErrorAction SilentlyContinue -ErrorVariable errs
  • Figyeld meg, hogy a cél a változó nevét, errsmeg kell adni anélkül, hogy a$ , mert te halad a változó neve , nem az értékét. $errsjön létre, a helyi változó.

    • Ez általában jobb kerülni, hogy a változók egész körét határokat, de ez lehet, hogy cél egy változót a script körét / globális körét ahelyett, mégpedig
      -ErrorVariable script:errs/-ErrorVariable global:errs
  • Hogy is elhallgattassa a hibák, használata -ErrorAction SilentlyContinuenem -ErrorAction Ignore- ez utóbbi elnyomja hibák összességében, ami $errsüres.

Válaszolt 03/12/2019 00:27
a forrás felhasználó

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