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.0
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)
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.0
odwołanie do nieistniejącej właściwości Month ciągu zwraca tylko $Null
wartość . W przypadku wersji 2.0
jest 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.