Set-StrictMode
Vytvoří a vynucuje pravidla kódování ve výrazech, skriptech a blocích skriptů.
Syntaxe
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
Rutina Set-StrictMode
nakonfiguruje striktní režim pro aktuální obor a všechny podřízené obory a zapne a vypne. Pokud je zapnutý striktní režim, PowerShell vygeneruje ukončující chybu, když obsah výrazu, skriptu nebo bloku skriptu porušuje základní pravidla kódování osvědčených postupů.
Pomocí parametru Version určete pravidla kódování, která se mají vynutit.
Set-PSDebug -Strict
Rutina zapne striktní režim pro globální obor. Set-StrictMode
ovlivňuje pouze aktuální obor a jeho podřízené obory. Pak ho můžete použít ve skriptu nebo funkci k přepsání nastavení zděděného z globálního oboru.
Když Set-StrictMode
je vypnutý, PowerShell má následující chování:
- Neinicializované proměnné se předpokládají, že mají hodnotu
0
(nula) nebo$Null
v závislosti na typu. - Vrátí odkazy na neexistující vlastnosti.
$Null
- Výsledky nesprávné syntaxe funkce se liší podle chybových podmínek.
- Pokus o načtení hodnoty pomocí neplatného indexu v matici vrátí
$Null
Příklady
Příklad 1: Zapnutí přísného režimu ve verzi 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.
Při použití striktního režimu nastaveného na verzi 1.0
se pokusy o odkazování na proměnné, které nejsou inicializovány, selžou.
Příklad 2: Zapnutí přísného režimu ve verzi 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.
Tento příkaz zapne striktní režim a nastaví ho na verzi 2.0
. V důsledku toho PowerShell vrátí chybu, pokud použijete syntaxi metody, která používá závorky a čárky, pro volání funkce nebo odkazování na neinicializované proměnné nebo neexistující vlastnosti.
Ukázkový výstup ukazuje účinek striktního režimu verze 2.0
.
Bez režimu striktního režimu (3,4)
verze 2.0
se hodnota interpretuje jako jeden maticový objekt, ke kterému se nic nečte přidat. V režimu striktní verze 2.0
se správně interpretuje jako chybná syntaxe pro odesílání dvou hodnot.
Bez verze 2.0
vrátí odkaz na neexistující vlastnost Month řetězce pouze $Null
. U verze 2.0
se správně interpretuje jako referenční chyba.
Příklad 3: Zapnutí přísného režimu ve verzi 3.0
Pokud je nastavený striktní režim Vypnuto, vrátí neplatné nebo mimo hranice indexů hodnoty 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."
V případě přísného režimu nastaveného na verzi 3
nebo vyšší může dojít k chybám neplatným indexům nebo indexům, které jsou mimo hranice.
Parametry
-Off
Označuje, že tato rutina vypne striktní režim pro aktuální obor a všechny podřízené obory.
Typ: | SwitchParameter |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
-Version
Určuje podmínky, které způsobují chybu v přísném režimu. Tento parametr přijímá jakékoli platné číslo verze PowerShellu. Jakékoli číslo vyšší, než 3
je považováno za Latest
. Zadaná hodnota musí být řetězec Latest
nebo řetězec, který lze převést na typ System.Version . Verze musí odpovídat platné verzi PowerShellu.
Platné hodnoty pro tento parametr jsou:
1.0
- Zakáže odkazy na neinicializované proměnné s výjimkou neinicializovaných proměnných v řetězcích.
2.0
- Zakáže odkazy na neinicializované proměnné. To zahrnuje neinicializované proměnné v řetězcích.
- Zakáže odkazy na neexistující vlastnosti objektu.
- Zakáže volání funkcí, která používají syntaxi pro volání metod.
3.0
- Zakáže odkazy na neinicializované proměnné. To zahrnuje neinicializované proměnné v řetězcích.
- Zakáže odkazy na neexistující vlastnosti objektu.
- Zakáže volání funkcí, která používají syntaxi pro volání metod.
- Zakázat mimo hranice nebo nerozpoznané indexy pole.
Latest
- Vybere nejnovější dostupnou verzi. Nejnovější verze je nejtriktnější. Pomocí této hodnoty se ujistěte, že skripty používají nejskutečnější dostupnou verzi, i když se do PowerShellu přidají nové verze.
Upozornění
Použití Latest
pro verzi ve skriptech není deterministické. Latest
Význam změn v nových verzích PowerShellu. Skript napsaný pro starší verzi PowerShellu, který používá Set-StrictMode -Version Latest
, podléhá více omezujícím pravidlům při spuštění v novější verzi PowerShellu.
Typ: | Version |
Aliasy: | v |
Position: | Named |
Default value: | None |
Vyžadováno: | True |
Přijmout vstup kanálu: | False |
Přijmout zástupné znaky: | False |
Vstupy
None
Do této rutiny nemůžete roušit objekty.
Výstupy
None
Tato rutina nevrátí žádný výstup.
Poznámky
Zatímco parametr Version přijímá hodnoty větší než 3.0
, neexistují žádná další pravidla definovaná pro cokoli vyššího než 3.0
.
Set-StrictMode
je efektivní pouze v rozsahu, ve který je nastavený a v podřízených oborech. Další informace o oborech v PowerShellu najdete v tématu about_Scopes.