Set-StrictMode
Richtet Codierungsregeln in Ausdrücken, Skripts und Skriptblöcken ein und erzwingt sie.
Syntax
Version (Standard)
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Off
Set-StrictMode
[-Off]
[<CommonParameters>]
Beschreibung
Das Cmdlet Set-StrictMode konfiguriert den strengen Modus für den aktuellen Bereich und alle untergeordneten Bereiche und aktiviert und deaktiviert. 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 zu bestimmen, welche Codierungsregeln erzwungen werden.
Set-PSDebug -Strict Cmdlet aktiviert den strikten Modus für den globalen Bereich.
Set-StrictMode betrifft nur den aktuellen Bereich und seine untergeordneten Bereiche. Daher 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 deaktiviert ist, weist PowerShell das folgende Verhalten auf:
- Nicht initialisierte Variablen werden davon ausgegangen, dass je nach Typ der Wert 0 (Null) oder
$Null - Verweise auf nicht vorhandene Eigenschaften geben
$Null - Die Ergebnisse einer unsachgemäßen Funktionssyntax variieren je nach Fehlerbedingungen.
- Beim Versuch, einen Wert mithilfe eines ungültigen Indexes in einem Array abzurufen, wird
$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
The variable $a cannot be retrieved because it has not been set yet.
At line:1 char:3
+ $a <<<< -gt 5
+ CategoryInfo : InvalidOperation: (a:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
Wenn der strikte Modus auf Version 1.0 festgelegt ist, versuchen Sie, auf Variablen zu verweisen, die nicht initialisiert sind.
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)
The function or command was called like a method. Parameters should be separated by spaces,
as described in 'Get-Help about_Parameter.'
At line:1 char:4
+ add <<<< (3,4)
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : StrictModeFunctionCallWithParens
Set-StrictMode -Off
$string = "This is a string."
$string.Month -eq $null
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$string.Month -eq $null
Property 'Month' cannot be found on this object; make sure it exists.
At line:1 char:9
+ $string. <<<< month
+ CategoryInfo : InvalidOperation: (.:OperatorToken) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFoundStrict
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 Modus von Version 2.0.
Ohne den strikten Modus der Version 2.0 wird der Wert "(3,4)" als einzelnes Arrayobjekt interpretiert, dem nichts hinzugefügt wird. Bei Verwendung des strengen Modus der Version 2.0 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 $Nullzurück. Mit Version 2.0 wird sie korrekt als Verweisfehler interpretiert.
Beispiel 3: Aktivieren des strikten Modus als Version 3.0
Wenn der strikte Modus auf Offfestgelegt ist, geben ungültige oder außer grenzende Indizes Nullwerte zurück.
# Strict mode is off by default.
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
True
True
Set-StrictMode -Version 3
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
Index was outside the bounds of the array.
At line:1 char:1
+ $a[2] -eq $null
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException
+ FullyQualifiedErrorId : System.IndexOutOfRangeException
Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $a['abc'] -eq $null
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Wenn der strenge 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.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
Off
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Version
Gibt die Bedingungen an, die einen Fehler im strikten Modus verursachen. Dieser Parameter akzeptiert eine beliebige gültige PowerShell-Versionsnummer. Eine beliebige Zahl, die höher als 3 ist, wird als Latestbehandelt.
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.
- Neueste Version
- 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.
Parametereigenschaften
| Typ: | Version |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | v |
Parametersätze
Version
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
None
Eingaben können nicht an dieses Cmdlet weitergereicht werden.
Ausgaben
None
Dieses Cmdlet gibt keine Ausgabe zurück.
Hinweise
Set-StrictMode ist nur in dem Bereich wirksam, in dem sie festgelegt ist, und in den untergeordneten Bereichen. Weitere Informationen zu Bereichen in PowerShell finden Sie unter about_Scopes.