Fouten en uitzonderingen in PowerShell: een complete handleiding voor het omgaan ermee

Laatste update: 09/04/2025
Auteur: Isaac
  • Verschillen tussen beëindigende en niet-beëindigende fouten in PowerShell
  • Geavanceerd gebruik van Try/Catch/Finally en variabelen zoals $Error en $ErrorActionPreference
  • Hoe u foutmeldingen kunt beheren en aanpassen voor een betere diagnose
  • Specifieke uitzonderingen opvangen met behulp van typen en Write-Error

Uitzonderingen in PowerShell-code

PowerShell is een van de krachtigste en meest veelzijdige tools voor het automatiseren van taken in Windows- omgevingen . Net als elke scripttaal is het echter niet vrij van fouten en uitzonderingen . Inzicht in hoe deze fouten worden gerapporteerd, beheerd en afgehandeld, is essentieel voor het maken van robuuste, duidelijke en gemakkelijk te debuggen scripts.

In dit artikel duiken we diep in de wereld van fouten en uitzonderingen in PowerShell . Je leert niet alleen hoe je verschillende soorten fouten correct kunt identificeren, maar ook hoe je effectief kunt werken met structuren zoals Try/Catch/Finally , hoe je belangrijke variabelen zoals $Error of $ErrorActionPreference kunt gebruiken en hoe je geavanceerde technieken onder de knie krijgt, zoals het gooien en vangen van uitzonderingen met specifieke typen.

PowerShell-fouten: belangrijkste concepten

Bij het gebruik van PowerShell zijn fouten een inherent onderdeel van de dagelijkse scriptontwikkeling. Een fout is in principe elke onverwachte situatie die zich voordoet tijdens de uitvoering van code. Maar niet alle fouten zijn hetzelfde, en ze worden ook niet allemaal op dezelfde manier afgehandeld.

We kunnen fouten indelen in twee hoofdtypen : fatale fouten en niet - fatale fouten.

  • Beëindigingsfouten: zijn kritieke fouten die onmiddellijk stoppen de uitvoering van het script of de cmdlet. Deze fouten kunnen worden vastgelegd met behulp van structuren try/catch.
  • Niet-fatale fouten: stop het script niet. PowerShell rapporteert ze eenvoudigweg in het rood en slaat ze op in $Error en gaat verder met het uitvoeren van de rest van de code.

Als u bijvoorbeeld probeert een bestand te openen dat niet bestaat, zal PowerShell doorgaans een foutmelding geven, maar de verwerking voortzetten tenzij u anders aangeeft. Zie ons artikel over foutafhandeling in PowerShell voor meer informatie over geavanceerde foutafhandeling.

  De manier om iCloud Drive in Home Windows 10 in te stellen

De variabele $Error en hoe deze te gebruiken

PowerShell houdt een foutengeschiedenis bij in de automatische variabele $Error, die fungeert als een lijst waarin alle fouten worden opgeslagen die tijdens de sessie zijn opgetreden.

Enkele sleutels met betrekking tot deze variabele:

  • $Error Het is altijd de meest recente fout.
  • Bevat objecten van het type ErrorRecord, niet alleen tekstberichten.
  • Standaard worden maximaal 256 fouten opgeslagen, configureerbaar via $MaximumErrorCount.

Gebruiksvoorbeeld:

# Ver el último error
$Error

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

Houd er rekening mee dat, aangezien dit een globale variabele is, fouten van de hele sessie hierin worden opgeslagen, niet alleen die van uw script. Het is daarom raadzaam om er niet te veel op te vertrouwen of om deze te wissen als u met nieuwe records gaat werken.

U kunt ook gebruiken Foutvariabele als alternatief, waarbij fouten in specifieke variabelen voor elke cmdlet worden vastgelegd, zonder dat dit de globale variabelen beïnvloedt $Error.

Parameters en voorkeuren voor foutverwerking

PowerShell biedt verschillende manieren om te bepalen hoe fouten moeten worden afgehandeld . De twee belangrijkste zijn:

  • Parameter -ErrorAction:U kunt dit gebruiken wanneer u een cmdlet aanroept om te bepalen hoe er moet worden gehandeld in geval van een fout.
  • De globale variabele $ErrorActionPreference: Hiermee stelt u het algemene foutbeleid in voor de gehele omgeving of het script.

De waarden die u kunt gebruiken zijn:

  • Doorgaan (standaard): Geeft de fout weer en gaat verder met de uitvoering.
  • StilDoorgaan: Het toont de fout niet, maar slaat deze op in $Error.
  • stop: Beschouw fouten als fataal en stop het scriptwaardoor ze kunnen worden vastgelegd met try/catch.
  • Informeren: Vraag de gebruiker wat hij moet doen.
  • negeren (sinds PowerShell 3.0): De fout wordt volledig genegeerd, niet opgeslagen en niet weergegeven.

Praktisch voorbeeld:

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

Dit geeft ons ongelooflijke flexibiliteit bij het bepalen welke soorten fouten het waard zijn om te onderbreken en welke niet . Zie onze handleiding over het uitvoeren van scripts in PowerShell voor meer informatie over foutafhandeling in scripts.

Gebruik Try, Catch en Finally

Vanaf PowerShell 2.0 kunnen we try/catch/finally-blokken gebruiken om fouten op een gestructureerde manier af te handelen.

  Kan fotoalbum op iPhone niet verwijderen: leren hoe te repareren?

De syntaxis is als volgt:

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
}

Het `try`-blok voert code uit die mogelijk een fout kan veroorzaken. Als er een fatale (afsluitende) fout optreedt, springt de code naar het bijbehorende `catch`-blok. Als er geen uitzonderingstype is gespecificeerd, wordt elke fout opgevangen.

Het Finally-blok is optioneel, maar handig wanneer je resources moet vrijmaken, verbindingen moet sluiten of moet opruimen.

Echt voorbeeld:

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

Binnen de Catch kunt u automatische variabelen gebruiken $_ o $PSItem om details van de fout te krijgen, zoals het bericht, het type, de stack trace, enz. Als u meer wilt weten over hoe u scripts kunt verbeteren en specifieke uitzonderingen kunt afhandelen, bekijk dan ons artikel over bugfixes in Windows 10.

...

Het correct afhandelen van fouten in PowerShell is een essentiële vaardigheid voor het maken van professionele scripts en het voorkomen dat cruciale taken worden stilgelegd door kleine problemen. Het beheersen van structuren zoals Try/Catch/Finally, het begrijpen van de automatische variabelen die PowerShell biedt en het leren werken met getypte uitzonderingen zijn fundamentele stappen naar een betere codekwaliteit.

Bovendien zijn er hulpmiddelen zoals Schrijffout, gecombineerd met parameters zoals -ErrorActiongeven ons volledige controle over wanneer en hoe fouten moeten worden weergegeven. Zo kunnen we ze tot in detail aanpassen en bijdragen aan een betere ervaring voor degenen die onze scripts uitvoeren.

Hoe om te gaan met fouten in PowerShell-3
Gerelateerd artikel:
Hoe u efficiënt met fouten in PowerShell omgaat