Strict-Mode
Wenn in Powershell auf eine nicht vorhandene Variable oder Eigenschaft zugegriffen wird, gibt Powershell keinen Fehler zurück - stattdessen gibt es einfach keine Ausgabe. Das kann in bestimmten Situationen hilfreich sein - wenn man z.B. prüfen möchte, ob eine Variable existiert - aber es führt auch dazu, dass fehlerhafte Variablen- oder Eigenschaftennamen in Powershell nur schwer zu finden sind. Hierzu zwei Beispiele:
Im folgenden Skript wird geprüft, ob der Benutzer einen Parameter übergeben hat:
param(
$Path
)
if ( $Path ) {
"Der Benutzer hat einen Pfad übergeben"
}
else {
"Es wurde kein Pfad übergeben"
}
In diesem Beispiel wurde die Eigenschaft Length falsch geschrieben:
$File = Get-Item -Path C:\Windows\notepad.exe
$File.Lenght. # Die Eigenschaft ist falsch geschrieben, aber es gibt keinen Fehler
Das Verhalten beim Zugriff auf nicht vorhandene Variablen und Eigenschaften kann mit dem Strict-Mode verändert werden. Er wird mit dem Cmdlet Set-StrictMode angepasst und kennt 2 Versionen:
- Version 1: Beim Zugriff auf nicht vorhandene Variablen wird ein Fehler ausgegeben
- Version 2 bzw. Latest: Beim Zugriff auf nicht vorhandene Variablen und nicht vorhandene Eigenschaften wird ein Fehler ausgegeben
Version 2 und Latest sind dabei gleichbedeutend. Zum Deaktivieren können Sie den Parameter -Off benutzen.
$Text = "Der Aufruf in der nächsten Zeile enthält einen Tippfehler"
$Test
Set-Strictmode -Version 2
$Test
> Die Variable "$Test" kann nicht abgerufen werden, weil sie nicht festgelegt wurde. In Zeile:4 Zeichen:1
$File = Get-Childitem -Path C:\windows\Notepad.exe
$File.MichGibtEsNicht
> Die Eigenschaft "MichGibtEsNicht" wurde für dieses Objekt nicht gefunden. Vergewis-sern Sie sich, dass die Eigenschaft vorhanden ist.
Set-Strictmode -Off
Der erste Aufruf von $Test in Zeile 2 erzeugt keine Rückgabe, da die Variable bis hierhin nicht existierte und daher keinen Inhalt hat. Ist der Strictmode auf Version 1 gesetzt, wird beim Verwenden einer nicht existierenden Variablen wie in Zeile 5 ein Fehler geworfen. Eine Variable muss also immer in einem Durchgang erstellt und zugewiesen werden. Ist Version 2 des Strictmode aktiviert, wird auch ein Fehler ausgegeben, wenn man auf eine nicht existierende Objekt-Eigenschaft zurückgreift.
Aktivieren Sie den Strictmode nur während der Entwicklung!
Achten Sie darauf, dass der Strictmode das Verhalten der Powershell umstellt, nicht das Verhalten Ihres Skripts. Wenn Sie den Strictmode in einem Skript einschalten, bleibt er also auch dann aktiviert, nachdem das Skript beendet wurde. Wenn Sie den Strictmode pauschal aktivieren, brechen damit alle Skripte ab, die z.B. das obige Beispiel verwenden, um zu prüfen, ob ein Parameter oder eine Variable gesetzt wurde. Wenn Sie den Strictmode in einem Skript aktivieren, sollten Sie ihn also am Ende des Skriptes auch wieder deaktivieren!