Udostępnij za pośrednictwem


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 cmdlet Set-StrictMode 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 wersji , aby określić reguły kodowania, które mają być wymuszane.

Set-PSDebug -Strict polecenie cmdlet włącza tryb ścisły dla zakresu globalnego. Set-StrictMode ma wpływ tylko na bieżący zakres i jego zakresy podrzędne. Następnie możesz użyć go w skrypicie lub funkcji, aby zastąpić ustawienie dziedziczone z zakresu globalnego.

Po wyłączeniu Set-StrictMode program PowerShell ma następujące zachowania:

  • Zakłada się, że niezainicjowane zmienne 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 jako wersja 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 zostały zainicjowane, kończą się niepowodzeniem.

Przykład 2. Włączanie trybu ścisłego jako wersja 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 do niezainicjowanych zmiennych lub nieistniejących właściwości.

Przykładowe dane wyjściowe pokazują efekt wersji 2.0 tryb ścisły.

Bez 2.0 wersji w trybie ścisłym wartość (3,4) jest interpretowana jako pojedynczy obiekt tablicy, do którego nic nie jest dodawane. Wersja 2.0 trybie ścisłym jest poprawnie interpretowana jako błędna składnia przesyłania dwóch wartości.

Bez 2.0wersji odwołanie do nieistniejącej właściwości Month ciągu zwraca tylko $Null. W przypadku 2.0wersji jest on poprawnie interpretowany jako błąd odwołania.

Przykład 3. Włączanie trybu ścisłego jako wersja 3.0

W trybie ścisłym ustawiono 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.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."

W przypadku ustawienia trybu ścisłego na wersję 3 lub nowszą, nieprawidłowe lub poza indeksami granic 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.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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ływania się do niezainicjowanych zmiennych, z wyjątkiem niezainicjowanych zmiennych w ciągach.
  • 2.0
    • Uniemożliwia odwoływania się do niezainicjowanych zmiennych. Obejmuje to niezainicjowane zmienne w ciągach.
    • Uniemożliwia odwoływania się do nieistniejących właściwości obiektu.
    • Uniemożliwia wywołania funkcji używające składni do wywoływania metod.
  • 3.0
    • Uniemożliwia odwoływania się do niezainicjowanych zmiennych. Obejmuje to niezainicjowane zmienne w ciągach.
    • Uniemożliwia odwoływania się do nieistniejących właściwości obiektu.
    • Uniemożliwia wywołania funkcji używające składni do wywoływania metod.
    • Zakazać poza granicami 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.

Ostrożność

Używanie dla wersji w skryptach nie jest deterministyczne. Znaczenie Latest może ulec zmianie w nowych wersjach programu PowerShell. Skrypt napisany dla starszej wersji programu PowerShell, który korzysta z Set-StrictMode -Version Latest, podlega bardziej restrykcyjnym regułom podczas uruchamiania w nowszej wersji programu PowerShell.

Typ:Version
Aliasy:v
Position:Named
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

None

Nie można potokować obiektów do tego polecenia cmdlet.

Dane wyjściowe

None

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

Uwagi

Mimo że parametr wersji akceptuje wartości większe niż , nie ma żadnych dodatkowych reguł zdefiniowanych dla niczego wyższego niż .

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