PowerShell
Felhantering
Sök…
Introduktion
Feltyper
Ett fel är ett fel, man kan undra hur det kan finnas typer i det. Tja, med powershell faller felet i stort sett i två kriterier,
- Avslutningsfel
- Fel som inte avslutar
Som namnet säger Avslutningsfel avslutar exekveringen och ett icke-avslutande fel låter exekveringen fortsätta till nästa uttalande.
Detta är sant under förutsättning att värdet för $ ErrorActionPreference är standard (Fortsätt). $ ErrorActionPreference är en Prefrence-variabel som berättar powershell vad man ska göra i händelse av ett "icke-avslutande" -fel.
Avslutningsfel
Ett avslutningsfel kan hanteras med en typisk testfång, som nedan
Try
{
Write-Host "Attempting Divide By Zero"
1/0
}
Catch
{
Write-Host "A Terminating Error: Divide by Zero Caught!"
}
Ovanstående kodstycke kommer att köras och felet kommer att fångas genom fångstblocket.
Ej avslutande fel
Ett icke-avslutande fel å andra sidan kommer inte att fångas i fångstblocket som standard. Anledningen bakom detta är ett icke-avslutande fel anses inte vara ett kritiskt fel.
Try
{
Stop-Process -Id 123456
}
Catch
{
Write-Host "Non-Terminating Error: Invalid Process ID"
}
Om du utför raden ovan får du inte utmatningen från fångstblocket eftersom felet inte anses vara kritiskt och exekveringen fortsätter helt enkelt från nästa kommando. Felet visas emellertid i konsolen. För att hantera ett icke-avslutande fel måste du enkelt ändra felinställningen.
Try
{
Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
"Non-Terminating Error: Invalid Process ID"
}
Nu med det uppdaterade felinställningen kommer detta fel att betraktas som ett avslutande fel och kommer att fångas i fångstblocket.
Åkalla avslutande och icke-avslutande fel:
Write-Error cmdlet skriver helt enkelt fel till det anropande värdprogrammet. Det stoppar inte körningen. Där som kast ger dig ett avslutningsfel och stoppar körningen
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"