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
| CMDlet | Variable | Standardwert |
|---|---|---|
| Write-Error | Wird immer ausgegeben | |
| Write-Warning | $WarningPreference | Continue |
| Write-Debug | $DebugPreference | SilentlyContinue |
| Write-Information | $InformationPreference | SilentlyContinue |
| Write-Progress | $ProgressPreference | Continue |
| Write-Verbose | $VerbosePreference | SilentlyContinue |
| Write-Output | Wird immer ausgegeben | |
| Write-Host | Wird immer ausgegeben |
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"PowerShellWARNING: WarningWrite-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"PowerShellWARNING: 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"PowerShellWARNING: Warning
Information