PowerShell
Foutafhandeling
Zoeken…
Invoering
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"