Zoeken…


Invoering

Dit onderwerp bespreekt fouttypen en foutafhandeling in PowerShell.

Fouttypen

Een fout is een fout, je kunt je afvragen hoe er typen in kunnen voorkomen. Nou, met powershell valt de fout grofweg in twee criteria,

  • Eindfout
  • Niet-beëindigende fout

Zoals de naam al zegt, zullen beëindigingsfouten de uitvoering beëindigen en een niet-beëindigingsfout laat de uitvoering doorgaan naar de volgende instructie.

Dit is waar in de veronderstelling dat de waarde $ ErrorActionPreference standaard is (doorgaan). $ ErrorActionPreference is een Prefrence Variable die powershell wat te doen in geval van een "Non-Terminating" fout vertelt.

Eindfout

Een beëindigingsfout kan worden afgehandeld met een typische try-catch, zoals hieronder

Try
{
    Write-Host "Attempting Divide By Zero"
    1/0
}
Catch
{
    Write-Host "A Terminating Error: Divide by Zero Caught!" 
}

Het bovenstaande fragment zal worden uitgevoerd en de fout zal worden gevangen door het vangblok.

Niet-beëindigende fout

Een niet-terminerende fout daarentegen wordt niet standaard in het catch-blok gevangen. De reden daarvoor is een niet-beëindigende fout wordt niet als een kritieke fout beschouwd.

Try
{
    Stop-Process -Id 123456
}
Catch
{
    Write-Host "Non-Terminating Error: Invalid Process ID"
}

Als u de bovenstaande regel uitvoert, krijgt u niet de uitvoer van het blokkeerblok omdat de fout niet als kritisch wordt beschouwd en de uitvoering gewoon door gaat vanaf het volgende commando. De fout wordt echter weergegeven in de console. Om een niet-terminerende fout af te handelen, moet u eenvoudig de foutvoorkeur wijzigen.

Try
{
    Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
    "Non-Terminating Error: Invalid Process ID"
}

Nu, met de bijgewerkte foutvoorkeur, wordt deze fout beschouwd als een beëindigingsfout en wordt hij gevangen in het catch-blok.

Oproepen van beëindigende en niet-beëindigende fouten:

Write-Error cmdlet schrijft de fout eenvoudig naar het aanroepende hostprogramma. Het stopt de uitvoering niet. Waar als gooien je een terminerende fout geeft en de uitvoering stopt

Write-host "Going to try a non terminating Error "
Write-Error "Non terminating" 
Write-host "Going to try a terminating Error "
throw "Terminating Error " 
Write-host "This Line wont be displayed" 


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow