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 strikten Modus für den aktuellen Bereich und alle untergeordneten Bereiche, und aktiviert und deaktiviert ihn. Wenn der strenge 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 Version-Parameter , um die Codierungsregeln zu bestimmen, um die Erzwingung zu erzwingen.

Set-PSDebug -Strict Cmdlet aktiviert den strikten Modus für den globalen Bereich. Set-StrictMode wirkt sich nur auf den aktuellen Bereich und die untergeordneten Bereiche aus. Anschließend können Sie es in einem Skript oder einer Funktion verwenden, um die vom globalen Bereich geerbte Einstellung außer Kraft zu setzen.

Wenn Set-StrictMode es deaktiviert ist, weist PowerShell die folgenden Verhaltensweisen auf:

  • Uninitialisierte Variablen werden angenommen, dass ein Wert von 0 (Null) oder $Nullje nach Typ
  • Verweise auf nicht vorhandene Eigenschaften zurückgeben $Null
  • Die Ergebnisse der nicht ordnungsgemäßen Funktionssyntax variieren mit 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.

Mit strengem Modus auf Version 1.0festgelegt, versucht, 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)

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.0fest. Als Ergebnis gibt PowerShell einen Fehler zurück, wenn Sie Die Methodensyntax verwenden, die Klammern und Kommas verwendet, für einen Funktionsaufruf oder verweis auf nicht vorhandene Variablen oder nicht vorhandene Eigenschaften.

Die Beispielausgabe zeigt den Effekt des strengen Versionsmodus 2.0 .

Ohne den strikten Versionsmodus 2.0 wird der (3,4) Wert als einzelnes Arrayobjekt interpretiert, dem nichts hinzugefügt wird. Mit dem strengen Versionsmodus 2.0 wird sie ordnungsgemäß als fehlerhafte Syntax für das Übermitteln von zwei Werten interpretiert.

Ohne Version 2.0gibt der Verweis auf die nicht vorhandene Monatseigenschaft einer Zeichenfolge nur $Nullzurück. Mit Version 2.0wird sie als Referenzfehler ordnungsgemäß interpretiert.

Beispiel 3: Aktivieren des strikten Modus als Version 3.0

Wenn der strenge Modus auf "Aus" festgelegt ist, gibt ungültige oder nicht gebundene 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."

Bei strengem Modus, der auf Version 3 oder höher festgelegt ist, führen ungültige oder nicht gebundene Indizes zu Fehlern.

Parameter

-Off

Gibt an, dass dieses Cmdlet den strikten Modus für den aktuellen Bereich und alle untergeordneten Bereiche deaktiviert.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Version

Gibt die Bedingungen an, die im Strict-Modus einen Fehler verursachen. Dieser Parameter akzeptiert eine gültige PowerShell-Versionsnummer. Jede Zahl höher als 3 behandelt wird.Latest 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, außer für nicht initialisierte Variablen in Zeichenfolgen.
  • 2.0
    • Verbietet Verweise auf nicht initialisierte Variablen. Dies umfasst nicht initialisierte Variablen in Zeichenfolgen.
    • Verbietet Verweise auf nicht vorhandene Eigenschaften eines Objekts.
    • Verhindert Funktionsaufrufe, die die Syntax für Aufrufmethoden verwenden.
  • 3.0
    • Verbietet Verweise auf nicht initialisierte Variablen. Dies umfasst nicht initialisierte Variablen in Zeichenfolgen.
    • Verbietet Verweise auf nicht vorhandene Eigenschaften eines Objekts.
    • Verhindert Funktionsaufrufe, die die Syntax für Aufrufmethoden verwenden.
    • Verbieten Von Grenzen oder unlösbaren Arrayindizes.
  • Latest
    • Wählt die neueste Version aus, die verfügbar ist. 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 von Versionen 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, unterliegen restriktiveren Regeln, wenn sie in einer neueren Version von PowerShell ausgeführt werden.

Type:Version
Aliases:v
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

None

Sie können keine Eingabe an dieses Cmdlet weiterleiten.

Ausgaben

None

Dieses Cmdlet gibt keine Ausgabe zurück.

Hinweise

Während der Version-Parameter Werte größer als akzeptiert, gibt es keine zusätzlichen Regeln, die für etwas 3.0höher 3.0als definiert sind.

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.