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 strict-Modus für den aktuellen Bereich und alle untergeordneten Bereiche und aktiviert und deaktiviert ihn. Wenn der strikte Modus aktiviert ist, generiert PowerShell einen Abbruchfehler, wenn der Inhalt eines Ausdrucks, Skripts oder Skriptblocks gegen grundlegende bewährte Codierungsregeln verstößt.
Verwenden Sie den Parameter Version , um die zu erzwingenden Codierungsregeln zu bestimmen.
Set-PSDebug -Strict
das Cmdlet aktiviert den strict-Modus für den globalen Bereich. Set-StrictMode
wirkt sich nur auf den aktuellen Bereich und seine untergeordneten Bereiche aus. Anschließend können Sie es in einem Skript oder einer Funktion verwenden, um die einstellung außer Kraft zu setzen, die vom globalen Bereich geerbt wurde.
Wenn Set-StrictMode
deaktiviert ist, weist PowerShell die folgenden Verhaltensweisen auf:
- Es wird davon ausgegangen, dass nicht initialisierte Variablen je nach Typ den Wert
0
(0) oder$Null
haben. - Verweise auf nicht vorhandene Eigenschaften geben zurück
$Null
- Die Ergebnisse einer nicht ordnungsgemäßen Funktionssyntax variieren je nach Den Fehlerbedingungen.
- Der Versuch, einen Wert mithilfe eines ungültigen Indexes in einem Array abzurufen, gibt zurück.
$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 strict-Modus auf version 1.0
festgelegt ist, schlagen Versuche, auf Variablen zu verweisen, die nicht initialisiert sind, fehl.
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 strict-Modus und legt ihn auf Version 2.0
fest. Als Ergebnis gibt PowerShell einen Fehler zurück, wenn Sie die Methodensyntax, die Klammern und Kommas verwendet, für einen Funktionsaufruf verwenden oder auf nicht initialisierte Variablen oder nicht vorhandene Eigenschaften verweisen.
Die Beispielausgabe zeigt die Auswirkungen des strikten Versionsmodus 2.0
.
Ohne den strikten Versionsmodus 2.0
wird der (3,4)
Wert als einzelnes Arrayobjekt interpretiert, dem nichts hinzugefügt wird. Im strikten Versionsmodus 2.0
wird er ordnungsgemäß als fehlerhafte Syntax zum Übermitteln von zwei Werten interpretiert.
Ohne Version 2.0
gibt der Verweis auf die nicht vorhandene Month-Eigenschaft einer Zeichenfolge nur $Null
zurück. Mit der Version 2.0
wird sie ordnungsgemäß als Verweisfehler interpretiert.
Beispiel 3: Aktivieren des strikten Modus als Version 3.0
Wenn der strict-Modus auf Aus festgelegt ist, geben ungültige oder nicht begrenzte Indizes null-Werte 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 nicht begrenzte Indizes zu Fehlern.
Parameter
-Off
Gibt an, dass dieses Cmdlet den strict-Modus für den aktuellen Bereich und alle untergeordneten Bereiche deaktiviert.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Version
Gibt die Bedingungen an, die im Strict-Modus einen Fehler verursachen. Dieser Parameter akzeptiert jede gültige PowerShell-Versionsnummer. Eine beliebige Zahl, die höher als 3
ist, wird als Latest
behandelt. Der angegebene Wert muss die Zeichenfolge Latest
oder eine Zeichenfolge sein, die in einen System.Version-Typ konvertiert werden kann. Die Version muss mit einer gültigen Releaseversion 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. Dies schließt nicht initialisierte Variablen in Zeichenfolgen ein.
- Verhindert Verweise auf nicht vorhandene Eigenschaften eines Objekts.
- Verhindert Funktionsaufrufe, die die Syntax zum Aufrufen von Methoden verwenden.
3.0
- Verbietet Verweise auf nicht initialisierte Variablen. Dies schließt nicht initialisierte Variablen in Zeichenfolgen ein.
- Verhindert Verweise auf nicht vorhandene Eigenschaften eines Objekts.
- Verhindert Funktionsaufrufe, die die Syntax zum Aufrufen von Methoden verwenden.
- Verbieten sie nicht zulässige oder nicht auflösbare 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 von Latest
für Version in Skripts ist nicht deterministisch. Die Bedeutung von Latest
kann 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
, unterliegt restriktiveren Regeln, wenn es in einer neueren Version von PowerShell ausgeführt wird.
Type: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
None
Sie können keine Objekte an dieses Cmdlet übergeben.
Ausgaben
None
Dieses Cmdlet gibt keine Ausgabe zurück.
Hinweise
Während der Version-Parameter Werte akzeptiert, die größer als 3.0
sind, sind keine zusätzlichen Regeln definiert, die für etwas höher als 3.0
definiert sind.
Set-StrictMode
ist nur in dem Bereich wirksam, der in und in den untergeordneten Bereichen festgelegt ist. Weitere Informationen zu Bereichen in PowerShell finden Sie unter about_Scopes.