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.