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