Besseres Logging – Preference Variablen

Wenn wir das Skript entwickeln und testen möchten wir detailliertere Infos. Sobald wir das Skript fertig geschrieben haben, brauchen wir keine Informationen, außer im Fehlerfall. Um das gezielt zu steuern, gibt es die Preference Variablen in PowerShell.

Einer der wichtigsten Fragen beim Logging ist: Was will ich genau loggen?

Wenn wir das Skript entwickeln und testen möchten wir detailliertere Infos. Sobald wir das Skript fertig geschrieben haben, brauchen wir keine Informationen, außer im Fehlerfall. Um das gezielt zu steuern, gibt es die Preference Variablen in PowerShell.

Preference Variablen und Standardwerte

CMDletVariableStandardwert
Write-ErrorWird immer ausgegeben
Write-Warning$WarningPreferenceContinue
Write-Debug$DebugPreferenceSilentlyContinue
Write-Information$InformationPreferenceSilentlyContinue
Write-Progress$ProgressPreferenceContinue
Write-Verbose$VerbosePreferenceSilentlyContinue
Write-OutputWird immer ausgegeben
Write-HostWird immer ausgegeben
Logging Preference Variablen und Standardwerte

Diese Variablen sind sehr praktisch, da wir damit unser Logging sehr genau bestimmen können.
Folgende Werte können die Variablen haben:

  • Continue
    • Das Ereignis wird behandelt, dann wird der Code weiter ausgeführt
  • Inquire
    • Es wird gefragt ob der Code weiter ausgeführt oder gestoppt werden soll
  • SilentlyContinue
    • Das Ereignis wird ignoriert und der Code weiter ausgeführt
  • Break
    • Es wird ins Debugging eingestiegen
  • Stop
    • Es wird sofort beendet

Continue vs. SiltenlyContinue

Wir sehen das die Standardwerte entweder Continue oder SilentlyContinue sind.
Worin besteht jetzt in der Praxis der Unterschied? Das können wir testen wenn wir folgendes einmal in PowerShell ausführen:

Write-Warning "Warning"
Write-Debug "Debug"
Write-Information "Information"
PowerShell
Konsolenausgabe
WARNING: Warning

Write-Warning wird ausgegeben, da es Continue ist, Debug und Information aber SilentlyContinue.

Festlegen der Preference Variablen

Jetzt überschreiben wird zu Beginn unseres Skriptes die Preferences fest:

###### Skript Settings ######
# Debugging Mode
$DebugPreference = "Continue"
$InformationPreference = "Continue"
#############################

Write-Warning "Warning"
Write-Debug "Debug"
Write-Information "Information"
PowerShell
Konsolenausgabe
WARNING: Warning
DEBUG: Debug
Information


Entwicklung vs. produktiver Einsatz

Sobald wir mit der Entwicklung des Skriptes fertig sind, können wir die Preferences wieder auskommentieren. Damit haben wir dann im Logging nur noch relevante Informationen.
Ich lasse gerne die Informationen eingeschaltet, damit ich im Log Protokoll nachvollziehen kann, wo das Skript dann später auf Fehler gestoßen ist.

###### Skript Settings ######
# Debugging Mode
#$DebugPreference = "Continue"
$InformationPreference = "Continue"
#############################

Write-Warning "Warning"
Write-Debug "Debug"
Write-Information "Information"
PowerShell
Konsolenausgabe
WARNING: Warning
Information