- 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

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
$Erroroch 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.
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:
$ErrorDet ä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.
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.
Passionerad författare om bytesvärlden och tekniken i allmänhet. Jag älskar att dela med mig av min kunskap genom att skriva, och det är vad jag kommer att göra i den här bloggen, visa dig alla de mest intressanta sakerna om prylar, mjukvara, hårdvara, tekniska trender och mer. Mitt mål är att hjälpa dig att navigera i den digitala världen på ett enkelt och underhållande sätt.