Set-StrictMode
Erstellt und erzwingt Codierungsregeln in Ausdrücken, Skripts und Skriptblöcken.
Syntax
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Beschreibung
Das Set-StrictMode
Cmdlet konfiguriert den strengen Modus für den aktuellen Bereich und alle untergeordneten Bereiche und aktiviert und deaktiviert ihn. Wenn der strikte Modus aktiviert ist, generiert PowerShell einen Beendigungsfehler, wenn der Inhalt eines Ausdrucks, Skripts oder Skriptblocks gegen grundlegende Best-Practice-Codierungsregeln verstößt.
Verwenden Sie den Parameter "Version ", um die zu erzwingenden Codierungsregeln zu bestimmen.
Set-PSDebug -Strict
das Cmdlet aktiviert den strikten Modus für den globalen Bereich. Set-StrictMode
betrifft nur den aktuellen Bereich und seine untergeordneten Bereiche. Anschließend können Sie sie in einem Skript oder einer Funktion verwenden, um die vom globalen Bereich geerbte Einstellung außer Kraft zu setzen.
Wenn Set-StrictMode
sie deaktiviert ist, weist PowerShell die folgenden Verhaltensweisen auf:
- Nicht initialisierte Variablen werden davon ausgegangen, dass sie je nach Typ einen Wert von
0
(Null) oder$Null
, je nach Typ, aufweisen. - Verweise auf nicht vorhandene Eigenschaften werden zurückgegeben.
$Null
- Die Ergebnisse einer unsachgemäßen Funktionssyntax variieren je nach Fehlerbedingungen.
- Der Versuch, einen Wert mithilfe eines ungültigen Indexes in einem Array abzurufen, wird zurückgegeben.
$Null
Beispiele
Beispiel 1: Aktivieren des strikten Modus als Version 1.0
# Strict mode is off by default.
$a -gt 5
False
Set-StrictMode -Version 1.0
$a -gt 5
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
Wenn der strikte Modus auf "Version 1.0
" festgelegt ist, schlägt versucht, auf Variablen zu verweisen, die nicht initialisiert werden.
Beispiel 2: Aktivieren des strikten Modus als Version 2.0
# Strict mode is off by default.
function add ($a, $b) {
'$a = ' + $a
'$b = ' + $b
'$a+$b = ' + ($a + $b)
}
add 3 4
$a = 3
$b = 4
$a+$b = 7
add(3,4)
$a = 3 4
$b =
$a+$b = 3 4
Set-StrictMode -Version 2.0
add(3,4)
InvalidOperation: The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.
Set-StrictMode -Off
$string = "This is a string."
$null -eq $string.Month
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month
PropertyNotFoundException: The property 'Month' cannot be found on this object. Verify that the property exists.
Dieser Befehl aktiviert den strikten Modus und legt ihn auf Version 2.0
fest. Daher gibt PowerShell einen Fehler zurück, wenn Sie Methodensyntax verwenden, die Klammern und Kommas verwendet, für einen Funktionsaufruf oder einen Verweis auf nicht initialisierte Variablen oder nicht vorhandene Eigenschaften.
Die Beispielausgabe zeigt den Effekt des strikten Versionsmodus 2.0
.
Ohne versions 2.0
strict mode wird der (3,4)
Wert als einzelnes Arrayobjekt interpretiert, dem nichts hinzugefügt wird. Mit dem modus "Version 2.0
strict" wird sie ordnungsgemäß als fehlerhafte Syntax für das Übermitteln von zwei Werten interpretiert.
Ohne Version 2.0
gibt der Verweis auf die nicht vorhandene Month-Eigenschaft einer Zeichenfolge nur $Null
zurück. Bei der Version 2.0
wird sie korrekt als Verweisfehler interpretiert.
Beispiel 3: Aktivieren des strikten Modus als Version 3.0
Wenn der strikte Modus auf "Aus" festgelegt ist, geben ungültige oder außer grenzende Indizes Nullwerte zurück.
# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
True
True
Set-StrictMode -Version 3.0
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
OperationStopped: Index was outside the bounds of the array.
InvalidArgument: Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
Wenn der strikte Modus auf Version 3
oder höher festgelegt ist, führen ungültige oder außer grenzende Indizes zu Fehlern.
Parameter
-Off
Gibt an, dass dieses Cmdlet den strikten Modus für den aktuellen Bereich und alle untergeordneten Bereiche deaktiviert.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Version
Gibt die Bedingungen an, die im Strict-Modus einen Fehler verursachen. Dieser Parameter akzeptiert eine beliebige gültige PowerShell-Versionsnummer. Eine beliebige Zahl, die höher als ist, 3
wird als Latest
behandelt. Der angegebene Wert muss die Zeichenfolge oder eine Zeichenfolge Latest
sein, die in einen System.Version-Typ konvertiert werden kann. Die Version muss mit einer gültigen Version von PowerShell übereinstimmen.
Die effektiven Werte für diesen Parameter sind:
1.0
- Verbietet Verweise auf nicht initialisierte Variablen, mit Ausnahme von nicht initialisierten Variablen in Zeichenfolgen.
2.0
- Verbietet Verweise auf nicht initialisierte Variablen. Dazu gehören nicht initialisierte Variablen in Zeichenfolgen.
- Verbietet Verweise auf nicht vorhandene Eigenschaften eines Objekts.
- Verbietet Funktionsaufrufe, die die Syntax zum Aufrufen von Methoden verwenden.
3.0
- Verbietet Verweise auf nicht initialisierte Variablen. Dazu gehören nicht initialisierte Variablen in Zeichenfolgen.
- Verbietet Verweise auf nicht vorhandene Eigenschaften eines Objekts.
- Verbietet Funktionsaufrufe, die die Syntax zum Aufrufen von Methoden verwenden.
- Verbieten Von Grenzen oder nicht aufgelösten Arrayindizes.
Latest
- Wählt die neueste verfügbare Version aus. Die neueste Version ist die strengste. Verwenden Sie diesen Wert, um sicherzustellen, dass Skripts die strengste verfügbare Version verwenden, auch wenn neue Versionen zu PowerShell hinzugefügt werden.
Achtung
Die Verwendung Latest
für version in Skripts ist nicht deterministisch. Die Bedeutung kann Latest
sich in neuen Versionen von PowerShell ändern. Ein Skript, das für eine ältere Version von PowerShell geschrieben wurde, die verwendet Set-StrictMode -Version Latest
wird, unterliegt restriktiveren Regeln, wenn es in einer neueren Version von PowerShell ausgeführt wird.
Typ: | Version |
Aliase: | v |
Position: | Named |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
None
Sie können keine Objekte an dieses Cmdlet weiterleiten.
Ausgaben
None
Dieses Cmdlet gibt keine Ausgabe zurück.
Hinweise
Der Parameter "Version" akzeptiert zwar werte größer als 3.0
, es gibt jedoch keine zusätzlichen Regeln, die für alles höhere definiert sind als 3.0
.
Set-StrictMode
ist nur im Bereich wirksam, in dem er und in seinen untergeordneten Bereichen festgelegt ist. Weitere Informationen zu Bereichen in PowerShell finden Sie unter about_Scopes.