Set-StrictMode

Ustanawia i wymusza reguły kodowania w wyrażeniach, skryptach i blokach skryptów.

Składnia

Set-StrictMode
   -Version <Version>
   [<CommonParameters>]
Set-StrictMode
   [-Off]
   [<CommonParameters>]

Opis

Polecenie Set-StrictMode cmdlet konfiguruje tryb ścisły dla bieżącego zakresu i wszystkich zakresów podrzędnych oraz włącza i wyłącza. Gdy tryb ścisły jest włączony, program PowerShell generuje błąd zakończenia, gdy zawartość wyrażenia, skryptu lub bloku skryptu narusza podstawowe reguły kodowania najlepszych rozwiązań.

Użyj parametru Version , aby określić, które reguły kodowania są wymuszane.

Set-PSDebug -Strict polecenie cmdlet włącza tryb ścisły dla zakresu globalnego. Set-StrictMode dotyczy tylko bieżącego zakresu i jego zakresów podrzędnych. W związku z tym można użyć go w skry skrycie lub funkcji, aby zastąpić ustawienie dziedziczone z zakresu globalnego.

Gdy Set-StrictMode program PowerShell jest wyłączony, ma następujące zachowania:

  • Zakłada się, że zmienne niezainicjowane mają wartość 0 (zero) lub $Null, w zależności od typu
  • Odwołania do nieistniejących właściwości zwracają $Null
  • Wyniki nieprawidłowej składni funkcji różnią się w zależności od warunków błędu
  • Próba pobrania wartości przy użyciu nieprawidłowego indeksu w tablicy zwraca $Null

Przykłady

Przykład 1: Włączanie trybu ścisłego w wersji 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.

W przypadku ustawienia trybu ścisłego na wersję 1.0program próbuje odwołać się do zmiennych, które nie są inicjowane, kończą się niepowodzeniem.

Przykład 2: Włączanie trybu ścisłego w wersji 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.

To polecenie włącza tryb ścisły i ustawia go na wersję 2.0. W związku z tym program PowerShell zwraca błąd, jeśli używasz składni metody, która używa nawiasów i przecinków, dla wywołania funkcji lub odwołania się do niezainicjowanych zmiennych lub nieistniejących właściwości.

Przykładowe dane wyjściowe pokazują efekt trybu ścisłego wersji 2.0 .

Bez trybu ścisłego wersji 2.0 wartość jest interpretowana jako pojedynczy obiekt tablicy, (3,4) do którego nic nie jest dodawane. Korzystając z trybu ścisłego wersji 2.0 , jest ona poprawnie interpretowana jako wadliwa składnia przesyłania dwóch wartości.

Bez wersji 2.0odwołanie do nieistniejącej właściwości Month ciągu zwraca tylko $Nullwartość . Przy użyciu wersji 2.0jest on poprawnie interpretowany jako błąd referencyjny.

Przykład 3. Włączanie trybu ścisłego w wersji 3.0

W przypadku ustawienia trybu ścisłego na wartość Wyłączone, nieprawidłowe lub poza indeksami wynik zwraca wartości null.

# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']

True
True

Set-StrictMode -Version 3
$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."

W przypadku ustawienia trybu ścisłego na wersję 3 lub nowszą, nieprawidłowe lub poza indeksami powodują błędy.

Parametry

-Off

Wskazuje, że to polecenie cmdlet wyłącza tryb ścisły dla bieżącego zakresu i wszystkich zakresów podrzędnych.

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

-Version

Określa warunki, które powodują błąd w trybie ścisłym. Ten parametr akceptuje dowolny prawidłowy numer wersji programu PowerShell. Dowolna liczba wyższa niż 3 jest traktowana jako Latest. Podana wartość musi być ciągiem Latest lub ciągiem, który można przekonwertować na typ System.Version . Wersja musi być zgodna z prawidłową wersją programu PowerShell.

Obowiązujące wartości tego parametru to:

  • 1.0
    • Uniemożliwia odwołania do niezainicjowanych zmiennych, z wyjątkiem niezainicjowanych zmiennych w ciągach.
  • 2.0
    • Uniemożliwia odwoływanie się do niezainicjowanych zmiennych. Obejmuje to niezainicjowane zmienne w ciągach.
    • Uniemożliwia odwoływanie się do nieistniejących właściwości obiektu.
    • Uniemożliwia wywołania funkcji, które używają składni do wywoływania metod.
  • 3.0
    • Uniemożliwia odwoływanie się do niezainicjowanych zmiennych. Obejmuje to niezainicjowane zmienne w ciągach.
    • Uniemożliwia odwoływanie się do nieistniejących właściwości obiektu.
    • Uniemożliwia wywołania funkcji, które używają składni do wywoływania metod.
    • Uniemożliwianie braku granic lub nierozwiązanych indeksów tablicy.
  • Latest
    • Wybiera najnowszą dostępną wersję. Najnowsza wersja jest najbardziej rygorystyczna. Użyj tej wartości, aby upewnić się, że skrypty korzystają z najściślejszej dostępnej wersji, nawet w przypadku dodania nowych wersji do programu PowerShell.

Przestroga

Używanie wersjiLatest w skryptach. Znaczenie Latest polecenia może ulec zmianie w nowych wersjach programu PowerShell. W związku z tym skrypt napisany dla starszej wersji programu PowerShell, który używa Set-StrictMode -Version Latest , podlega bardziej restrykcyjnym regułom podczas uruchamiania w nowszej wersji programu PowerShell.

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

Dane wejściowe

None

Nie można przekazać danych wejściowych potoku do tego polecenia cmdlet.

Dane wyjściowe

None

To polecenie cmdlet nie zwraca żadnych danych wyjściowych.

Uwagi

Chociaż Set-StrictMode parametr Version akceptuje wartości większe niż 3.0, obecnie nie zdefiniowano żadnych dodatkowych reguł dla niczego wyższego niż 3.0.

Set-StrictMode jest skuteczny tylko w zakresie, w którym jest ustawiony i w zakresach podrzędnych. Aby uzyskać więcej informacji na temat zakresów w programie PowerShell, zobacz about_Scopes.