Fel och undantag i PowerShell: En komplett guide för att hantera dem

Senaste uppdateringen: 09/04/2025
Författare: Isaac
  • Skillnader mellan avslutande och icke-avslutande fel i Power
  • Avancerad användning av Try/Catch/Finally och variabler som $Error och $ErrorActionPreference
  • Hur man kontrollerar och anpassar felmeddelanden för bättre diagnos
  • Fånga specifika undantag med hjälp av typer och använda Write-Error

Undantag i PowerShell-kod

Power Det är ett av de mest kraftfulla och mångsidiga verktygen för att automatisera uppgifter i miljöer Windows. Men som alla skriptspråk är det inte utan sina nackdelar. fel och undantag. Att förstå hur dessa fel rapporteras, hanteras och hanteras är avgörande för att skapa robusta, tydliga och enkla att felsöka skript.

I den här artikeln kommer vi att dyka in i världen av Fel och undantag i PowerShell. Du lär dig inte bara att korrekt identifiera de olika typerna av fel, utan också att arbeta effektivt med strukturer som Try/Catch/Finally, använd nyckelvariabler som t.ex $Error o $ErrorActionPreference, och behärska avancerade tekniker som att kasta och fånga undantag med specifika typer.

PowerShell-fel: Nyckelbegrepp

När du använder PowerShell är fel en daglig del av skriptutveckling. En bugg är i princip alla oväntade tillstånd som uppstår under kodexekvering. Men alla fel är inte lika, och de hanteras inte heller på samma sätt.

Vi kan klassificera fel i två huvudtyper:: avslutande fel och fel som inte stoppar skript (icke-avslutande fel).

  • Uppsägningsfel: är kritiska fel som sluta omedelbart körningen av skriptet eller cmdleten. Dessa fel kan fångas med hjälp av strukturer try/catch.
  • Icke-fatala fel: stoppa inte skriptet. PowerShell rapporterar dem helt enkelt i rött, sparar dem i $Error och fortsätter att köra resten av koden.

Om du till exempel försöker komma åt en fil som inte finns kommer PowerShell vanligtvis att rapportera felet men fortsätta bearbetningen, om du inte anger något annat. För mer information om avancerad felhantering kan du besöka vår artikel om felhantering i PowerShell.

  Metoder för att upptäcka Home Windows 10 produktnyckel

Variabeln $Error och hur man använder den

PowerShell håller en felhistorik i den automatiska variabeln $Error, som fungerar som en lista där alla fel som uppstod under sessionen lagras.

Några nycklar om denna variabel:

  • $Error Det är alltid det senaste misstaget.
  • Innehåller objekt av typen ErrorRecord, inte bara textmeddelanden.
  • Maximalt 256 fel lagrade som standard, konfigurerbar genom $MaximumErrorCount.

Användningsexempel:

# Ver el último error
$Error

# Limpiar la lista de errores
$Error.Clear()

Du måste ta hänsyn till att eftersom det är en global variabel, felen för hela sessionen lagras här, inte bara de från ditt skript. Därför är det tillrådligt att inte förlita sig överdrivet på den eller att tömma den om du ska arbeta med nya skivor.

Du kan också använda ErrorVariable som ett alternativ, som fångar upp fel i specifika variabler för varje cmdlet, utan att påverka den globala $Error.

Parametrar och inställningar för felhantering

PowerShell erbjuder flera sätt att bestämma hur fel ska bete sig. De två mest relevanta är:

  • Parameter -ErrorAction: Du kan använda den när du anropar en cmdlet för att bestämma hur du ska agera vid ett fel.
  • Den globala variabeln $ErrorActionPreference: Ställer in den allmänna felpolicyn för hela miljön eller skriptet.

Värdena du kan använda är:

  • Fortsätta (standard): Visar felet och fortsätter körningen.
  • Tyst Fortsätt: Det visar inte felet men sparar det i $Error.
  • Sluta: Behandla fel som ödesdigra och stoppa manuset, så att de kan fångas med try/catch.
  • Fråga oss: Fråga användaren vad han ska göra.
  • Ignorera (sedan PowerShell 3.0): ignorerar felet helt, varken sparar eller visar det.

Praktiskt exempel:

$ErrorActionPreference = "Stop"  # Todos los errores serán tratados como fatales
Get-ChildItem "C:\RutaInexistente" -ErrorAction SilentlyContinue

Detta ger oss brutal flexibilitet att besluta vilken typ av fel är värda att avbryta och vilka som inte är det. För mer information om felhantering i skript, se vår guide om kör skript i PowerShell.

Använda Try, Catch och Finally

Från och med PowerShell 2.0 kan vi använda försök/fånga/slutligen blockerar att fånga upp fel på ett strukturerat sätt.

  Kontoret tar lång tid att öppna: fullständig diagnos och effektiva åtgärder

Dess syntax är följande:

Try {
  # Código que podría fallar
}
Catch  {
  # Código para manejar esa excepción
}
Catch {
  # Código para manejar errores genéricos
}
Finally {
  # Código que siempre se ejecuta al final, falle o no
}

Blocket Try kör kod som potentiellt kan generera ett fel. Om en dödlig (avslutande) typ inträffar, vi hoppar in i Catch motsvarande. Om ingen undantagstyp anges, fångas alla fel upp.

Blocket till slut Det är valfritt men användbart när du behöver frigöra resurser, stänga kontakter eller städa.

Verkligt exempel:

Try {
  Get-Content "C:\ArchivoInexistente.txt" -ErrorAction Stop
}
Catch {
  Write-Error "No se pudo abrir el archivo: $($_.Exception.Message)"
}
Finally {
  Write-Output "Finalizado"
}

Inom Catch kan du använda automatiska variabler $_ o $PSItem för att få information om felet, såsom dess meddelande, typ, stackspårning, etc. Om du vill lära dig mer om hur du förbättrar skript och hanterar specifika undantag, kolla in vår artikel om buggfixar i Windows 10.

.

Att hantera fel korrekt i PowerShell är en av nyckelfärdigheterna för att skapa professionella skript. och förhindra att en kritisk uppgift stoppas av mindre problem. Att bemästra strukturer som Try/Catch/Finally, förstå de automatiska variablerna som PowerShell erbjuder och lära sig att arbeta med typskrivna undantag är grundläggande steg för att förbättra kvaliteten på vår kod.

Dessutom verktyg som t.ex Skriv-fel, kombinerat med parametrar som t.ex -ErrorAction, ger oss fullständig kontroll över när och hur fel ska visas, så att vi kan anpassa dem i detalj och bidra till en bättre upplevelse för dem som kör våra skript.

Hur man hanterar fel i powershell-3
Relaterad artikel:
Hur man hanterar fel i PowerShell effektivt