Set-StrictMode
Vytvoří a vynucuje pravidla kódování ve výrazech, skriptech a blocích skriptů.
Syntax
Version (Výchozí)
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Off
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
Rutina Set-StrictMode konfiguruje 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, která pravidla kódování se vynucují.
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. Proto ho můžete použít ve skriptu nebo funkci k přepsání nastavení zděděného z globálního oboru.
Když je Set-StrictMode vypnutý, Má PowerShell následující chování:
- Neinicializované proměnné se předpokládají, že mají hodnotu 0 (nula) nebo
$Nullv závislosti na typu. - Odkazy na neexistující vlastnosti vrací
$Null - Výsledky nesprávné syntaxe funkce se liší podle chybových podmínek.
- Pokus o načtení hodnoty pomocí neplatného indexu v poli 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
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
Při nastavení striktního režimu na verzi 1.0 se pokusy o odkazování na proměnné, které nejsou inicializovány, nezdaří.
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)
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."
$string.Month -eq $null
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$string.Month -eq $null
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
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 efekt striktního režimu verze 2.0.
Bez striktního režimu verze 2.0 se hodnota (3;4) interpretuje jako jeden objekt pole, ke kterému se nic nečte přidat. Pomocí striktního režimu 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. Při použití verze 2.0 se správně interpretuje jako referenční chyba.
Příklad 3: Zapnutí přísného režimu ve verzi 3.0
S přísným režimem nastaveným na Vypnuto, neplatné nebo mimo indexy vrátí hodnoty null.
# Strict mode is off by default.
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
True
True
Set-StrictMode -Version 3
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
Index was outside the bounds of the array.
At line:1 char:1
+ $a[2] -eq $null
+ ~~~~~~~~~~~~~~~
+ 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
+ $a['abc'] -eq $null
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Při použití striktního režimu nastaveného na verzi 3 nebo vyšší může dojít k chybám neplatných indexů nebo indexů mimo hranice.
Parametry
-Off
Označuje, že tato rutina vypne striktní režim pro aktuální obor a všechny podřízené obory.
Vlastnosti parametru
| Typ: | SwitchParameter |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
Off
| Position: | Named |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | 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 se považuje za nejnovější.
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.
- Nejnovější
- 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.
Vlastnosti parametru
| Typ: | Version |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
| Aliasy: | v |
Sady parametrů
Version
| Position: | Named |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
CommonParameters
Tato rutina podporuje běžné parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction a -WarningVariable. Další informace najdete v about_CommonParameters.
Vstupy
None
Vstup do této rutiny nelze převést.
Výstupy
None
Tato rutina nevrací žádný výstup.
Poznámky
Set-StrictMode je efektivní pouze v oboru, ve kterém je nastaven a v podřízených oborech. Další informace o oborech v PowerShellu najdete v tématu about_Scopes.