PowerShell Errorhandling: Write-Debug DebugPreference

 

Damit die Fehlersuche in PowerShell einfacher wird, können bei Bedarf zusätzliche Debug-Ausgaben in das Skript eingebaut werden.

Write-Debug

Für die Ausgabe der Debug-Meldungen wird der Befehl Write-Debug verwendet.

Write-Debug "Zusätzliche Information für die Problemsuche" 

 

Die Variable $DebugPreference ist im Standard auf: SilentlyContinue, daher werden die Meldungen ohne Aktivieren dieser ignoriert.

Die Debug-Informationen werden also standardmäßig nicht in der Konsole ausgegeben:

$DebugPreference

Das Debuging kann durch das Anpassen der Variable $DebugPreference aktiviert werden:

$DebugPreference = "Continue"

 

Anzeige der aktuellen Debug-Einstellung: dir variable:*pref*

PS C:\> dir variable:*pref*

Name Value
---- -----
ConfirmPreference High
DebugPreference SilentlyContinue
ErrorActionPreference Continue
ProgressPreference Continue
VerbosePreference SilentlyContinue
WarningPreference Continue
InformationPreference SilentlyContinue
WhatIfPreference False

ErrorAction ErrorVariable (-EA -EV)

PowerShellBefehl -EA SiltentlyContinue

-EA SilentlyContinue unterdrückt Fehlermeldungen

-EA MyErrorVariable speichert den Fehler in der Variable $MyErrorVariable

$MyInvocation - wie wurde die Funktion aufgerufen

$MyInvocation zeigt Informationen über welchen Befehl, welche Zeile und von welcher Datei eine Funktion aufgerufen wurde. 

Hier ein Beispiel mit 2 PowerShell-Dateien. Die Datei exec.ps1 lädt eine zweite Datei functions.ps1 und führt die darin enthaltene Funktion f aus:

Mittels $MyInvocation kann ausgelesen werden, über welchen Befehl die Funktion aufgerufen wurde:

Datei: functions.ps1

function f() {
Write-Debug "Aufgerufen mittels Funktion: $($MyInvocation.InvocationName) File: $($MyInvocation.ScriptName) line: $($MyInvocation.ScriptLineNumber) "
}

 

Datei: exec.ps1 

$DebugPreference = "Continue"
. c:\temp\functions.ps1
f()

 

Beim Ausführen von exec.ps1 wird die Funktion f in functions.ps1 aufgerufen.

Die Funktion f teilt uns mit, von wo aus sie gestartet wurde, Aus der Datei: exec.ps1 Zeile 3

$MyInvocation - in welcher Zeile wurde der Befehl ausgeführt

Für das Debuging ist sehr oft interessant, in welcher Zeile des Quellcodes wir uns befinden. Dazu müssen wir einfach erneut eine Funktion aufrufen und die Variable $MyInvocation teilt uns dann mit, von welcher Zeile die Funktion aufgerufen wurde, dazu erweitere ich unsere functions.ps1 Datei um 2 Funktionen:

function Get-CurrentLineNumber {$MyInvocation.ScriptLineNumber}
function Get-CurrentFileName {$MyInvocation.ScriptName}
function f() {
Write-Debug "Aufgerufen mittels Funktion: $($MyInvocation.InvocationName) File: $($MyInvocation.ScriptName) line: $($MyInvocation.ScriptLineNumber) "
Write-Debug "befinde mich in Funktion $($MyInvocation.InvocationName) File: $(Get-CurrentFileName) line: $(Get-CurrentLineNumber)"
}

 

Beim Aufruf aus exec.ps1, bekommen wir auch die Information, in welcher Zeile die Debug-Meldung entstanden ist.

 

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
30.09.2016 08:37
User: Peter 
Gute Sache. Verständlich erklärt.