Skip to the main content.

PowerShell-Erfolgsrezepte – die Profi-Tipps für effektives Scripting

Für besseren Überblick: Wandle Fehlerobjekte in Datenobjekte um

Müde vom Jonglieren mit der PowerShell-Fehlerbehandlung? Hier kommt ein Überblick über verschiedene Strategien, mit Fehlern umzugehen. Vereinfache dir die Arbeit! So werden aus Fehler-Objekten Daten-Objekte, mit denen Fehlerbehebung reibungsloser denn je wird.

Wandle Fehler (error objects) in hilfreiche Daten

In unserer Miniserie sind wir auf verschiedene Weise mit Ausnahmen in Berührung gekommen: über $_ in einem Catch-Block oder einer Trap, über $error oder separate Fehlervariablen, die mit -ErrorVariable definiert werden, oder durch Umleitung des Fehlerstroms in die Pipeline.

In all diesen Fällen erhalten Sie Fehlerobjekte. Hier ist eine generische Funktion, die Sie verwenden können, um alle diese Fehlerdatensätze einfach in praktische Datenobjekte zu konvertieren:


filter Convert-ErrorRecord
{
[PSCustomObject]@{
Exception = $_.Exception.Message
Reason = $_.CategoryInfo.Reason Target = $_.CategoryInfo.TargetName
Script = $_.InvocationInfo.ScriptName
Line = $_.InvocationInfo.ScriptLineNumber
Column = $_.InvocationInfo.OffsetInLine
}
}

 

Diese Funktion ist in allen in dieser Serie besprochenen Fehlerbehandlungsprogrammen vorhanden.  

Zusammenfassend kann man sagen, dass alle vier, in diesem Monat behandelten Fehlerbehandlungsstrategien Convert-ErrorRecord verwenden, um die Ausnahmen in einfach zu handhabende Datenobjekte umzuwandeln. Stelle sicher, dass die obige Convert-ErrorRecord-Funktion definiert ist. Nachdem du sie ausgeführt hast, kannst du eines der folgenden Beispiele ausprobieren:

 

Mit try/catch:


try
{
    Write-Host 'Previous Command'
    $result = Get-ChildItem -Path $env:windir -Depth 1 -Filter *.log -ErrorAction Stop
    Write-Host 'Next Command'
}
catch
{
    $_ | Convert-ErrorRecord
}

 

Mit Trap:


Write-Host 'Previous Command'
$result = Get-ChildItem -Path $env:windir -Depth 1 -Filter *.log -ErrorAction Stop
Write-Host 'Next Command'

trap
{
$_ | Convert-ErrorRecord
continue
}

 

Mit $Fehler:


$error.Clear()

# Fehlermeldungen für den Benutzer ausblenden
$ErrorActionPreference = 'SilentlyContinue'

# Cmdlet-Aktionen ausführen, d.h. Protokolldateien finden
$result = Get-ChildItem -Path $env:windir -Depth 1 -Filter *.log 

# weitere Aktionen durchführen, z.B. auf einen Dienst zugreifen, der nicht existiert
$service = Get-Service -Name notThere 

# Standard-Fehleraktion wiederherstellen
$ErrorActionPreference = 'Continue'

# Fehler im Nachhinein überprüfen
$errorCount = $error.Count
Write-Host "Es gab $errorCount Fehler."

# Fehlerdetails ausgeben
$error | Convert-ErrorRecord

 

Mit Fehlerstrom (error strom):


Get-ChildItem -Path c:\windows -Depth 1 -Filter *.log 2>&1 | ForEach-Object {
  if ($_ -is [System.Management.Automation.ErrorRecord])
  {
    $text = $_ | Convert-ErrorRecord | Out-String
    Write-Host $text
  }
  else
  {
    $_
  }
}

 

Das waren also alle vier Blogbeiträge im Oktober:  

 

Good2know

Dein ultimativer PowerShell-Spickzettel

Entfessele das volle Potenzial von PowerShell mit unserem praktischen Poster. Egal, ob frischer Einsteiger oder erfahrener Profi, dieser Spickzettel ist so konzipiert, dass du schnell die wichtigsten und am häufigsten verwendeten Cmdlets findest.

Das Poster ist zum Download und in Papierform erhältlich.

PowerShell Poster 2023

Hol dir hier dein Poster!

 

 

Weiterführende Links 

Zusammenhängende Posts

3 min read

Skriptabbruch verhindern: PowerShell-Fehler clever behandeln

Da $error eine globale Variable ist, solltest du in Erwägung ziehen, eine eigene Protokollierungsvariable für die...

3 min read

Stelle Fehlern eine Falle! Mit der Trap-Anweisung Terminating Errors abfangen

Du bist mit try...catch vertraut? Exceptions kannst du mit Trap-Anweisungen behandeln. Kurz und knackig kommt hier der...

5 min read

Mehr Ordnung in PowerShell: lagere Konfigurationsdaten einfach aus

Verabschiede dich von fest codierten Pfaden und Einstellungen! Vereinfache deine PowerShell-Skripte, indem du...

Über den Autor: