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 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 Wersja , aby określić reguły kodowania w celu wymuszenia.

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. Następnie możesz użyć go w skrypicie 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 jako wersja 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

W trybie ścisłym ustawionym na wersję 1.0pró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)

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."
$null -eq $string.Month

True

Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month

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

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 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. W trybie ścisłym wersji 2.0 jest on poprawnie interpretowany jako błędna 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ść . W przypadku wersji 2.0jest 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']

Index was outside the bounds of the array.
At line:1 char:1
+ $null -eq $a[2]
+ ~~~~~~~~~~~~~~~
    + 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
+ $null -eq $a['abc']
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

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.

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.

Uwaga

Używanie Latest dla opcji Wersja 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 używa 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

Chociaż parametr Version akceptuje wartości większe niż 3.0, nie ma żadnych dodatkowych reguł zdefiniowanych dla niczego wyższego niż 3.0.

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.