Sdílet prostřednictvím


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í v závislosti na typu hodnotu 0 (nula) nebo $Null.
  • 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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.

Je-li přísný režim nastaven na hodnotu version 1.0, 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 verze 2.0 striktní režim.

Bez verze 2.0 striktní režim se hodnota (3,4) interpretuje jako jeden maticový objekt, ke kterému se nic nečte přidat. Při použití přísného režimu verze 2.0 je správně interpretován jako chybná syntaxe pro odeslání dvou hodnot.

Bez 2.0verze vrátí odkaz na neexistující vlastnost Měsíc řetězce pouze $Null. Při použití verze 2.0je chyba, která je správně interpretována jako chyba odkazu.

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)
$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."

Při použití přísného režimu nastaveného na verzi 3 nebo vyšší může dojít k chybám neplatných indexů nebo indexů, 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.

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 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í verzeLatest ve skriptech. Význam Latest se může změnit v nových verzích PowerShellu. Proto skript napsaný pro starší verzi PowerShellu, který používá Set-StrictMode -Version Latest , podléhá při spuštění v novější verzi PowerShellu přísnějším pravidlům.

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

Zatímco Set-StrictModeparametr Version akceptuje hodnoty větší než 3.0, v současné době nejsou definována žádná další pravidla pro cokoli vyššího než 3.0.

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.