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