Sök…


Introduktion

Det här ämnet diskuterar feltyper och felhantering i PowerShell.

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" 


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow