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.
{{percentage}} % positiv
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]