Set-StrictMode
Kódolási szabályokat hoz létre és kényszerít ki kifejezésekben, szkriptekben és szkriptblokkokban.
Syntax
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
A Set-StrictMode
parancsmag szigorú módot konfigurál az aktuális hatókörhöz és az összes gyermekhatókörhöz, és be- és kikapcsolja azt. Ha a szigorú mód be van kapcsolva, a PowerShell megszüntetési hibát okoz, ha egy kifejezés, szkript vagy szkriptblokk tartalma megsérti az alapvető ajánlott eljárás kódolási szabályait.
A Verzió paraméter használatával határozza meg a kikényszeríteni kívánt kódolási szabályokat.
Set-PSDebug -Strict
a parancsmag bekapcsolja a globális hatókör szigorú módját. Set-StrictMode
csak az aktuális hatókört és annak gyermek hatóköreit érinti. Ezután egy szkriptben vagy függvényben is használhatja a globális hatókörtől örökölt beállítás felülbírálásához.
Ha Set-StrictMode
ki van kapcsolva, a PowerShell a következő viselkedésekkel rendelkezik:
- A nem inicializált változók értéke
0
(nulla) vagy$Null
típustól függően - Nem létező tulajdonságokra mutató hivatkozások visszatérése
$Null
- A helytelen függvényszintaxis eredménye a hibafeltételek függvényében változik
- Érték lekérése egy tömb érvénytelen indexével
$Null
Példák
1. példa: A szigorú mód bekapcsolása 1.0-s verzióként
# 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
A szigorú mód verzióra 1.0
van állítva, és nem inicializált változókra próbál hivatkozni.
2. példa: A szigorú mód bekapcsolása 2.0-s verzióként
# 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."
$null -eq $string.Month
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month
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
Ez a parancs bekapcsolja a szigorú módot, és verzióra 2.0
állítja. Ennek eredményeképpen a PowerShell hibát ad vissza, ha zárójeleket és vesszőket használó metódusszintaxist használ függvényhíváshoz, vagy nem inicializált változókra vagy nem létező tulajdonságokra hivatkozik.
A mintakimenet a szigorú verziójú 2.0
mód hatását mutatja.
A szigorú verziójú 2.0
mód nélkül az (3,4)
érték egyetlen tömbobjektumként lesz értelmezve, amelyhez semmit sem ad hozzá. A szigorú verziómóddal 2.0
a rendszer helyesen értelmezi hibás szintaxisként két érték beküldéséhez.
Verzió 2.0
nélkül a sztring nem létező Hónap tulajdonságára való hivatkozás csak $Null
. A verzióban a rendszer 2.0
helyesen értelmezi hivatkozási hibaként.
3. példa: A szigorú mód bekapcsolása 3.0-s verzióként
Ha a szigorú mód ki van kapcsolva, az indexek érvénytelenek vagy kívülre kerülnek, az eredmény null értékeket ad vissza.
# 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']
Index was outside the bounds of the array.
At line:1 char:1
+ $null -eq $a[2]
+ ~~~~~~~~~~~~~~~
+ 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
+ $null -eq $a['abc']
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Ha a szigorú mód verzióra 3
vagy magasabbra van állítva, az érvénytelen vagy a korláton kívüli indexek hibákat eredményeznek.
Paraméterek
-Off
Azt jelzi, hogy ez a parancsmag kikapcsolja a szigorú módot az aktuális hatókörhöz és az összes gyermekhatókörhöz.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Version
Megadja azokat a feltételeket, amelyek hibát okoznak szigorú módban. Ez a paraméter bármilyen érvényes PowerShell-verziószámot elfogad. A kezelt Latest
számnál 3
nagyobb szám. A megadott értéknek a System.Version típussá konvertálható sztringnek Latest
vagy sztringnek kell lennie. A verziónak meg kell egyeznie a PowerShell érvényes kiadási verziójával.
A paraméter érvényes értékei a következők:
1.0
- Tiltja a nem nemi alapú változókra mutató hivatkozásokat, kivéve a sztringekben lévő nemi változókat.
2.0
- Tiltja a nem inicializált változókra mutató hivatkozásokat. Ide tartoznak a sztringek nem nemializált változói.
- Tiltja az objektumok nem létező tulajdonságaira mutató hivatkozásokat.
- Tiltja a metódusok hívásához használt szintaxist használó függvényhívásokat.
3.0
- Tiltja a nem inicializált változókra mutató hivatkozásokat. Ide tartoznak a sztringek nem nemializált változói.
- Tiltja az objektumok nem létező tulajdonságaira mutató hivatkozásokat.
- Tiltja a metódusok hívásához használt szintaxist használó függvényhívásokat.
- Tiltsa ki a korlátokat vagy a nem feloldható tömbindexeket.
Latest
- Kiválasztja a legújabb elérhető verziót. A legújabb verzió a legszigorúbb. Ezzel az értékkel győződjön meg arról, hogy a szkriptek a legszigorúbb elérhető verziót használják, még akkor is, ha új verziókat adnak hozzá a PowerShellhez.
Figyelemfelhívás
A Latest
szkriptekben használt verzió nem determinisztikus. Ennek jelentése Latest
megváltozhat a PowerShell új kiadásaiban. A PowerShell Set-StrictMode -Version Latest
régebbi verziójához írt szkriptekre szigorúbb szabályok vonatkoznak, ha a PowerShell újabb verzióiban futnak.
Típus: | Version |
Aliasok: | v |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
None
Ehhez a parancsmaghoz nem lehet objektumokat csövezni.
Kimenetek
None
Ez a parancsmag nem ad vissza kimenetet.
Jegyzetek
Bár a Verzió paraméter a nagyobb 3.0
értékeket fogadja el, a rendszer nem határoz meg további szabályokat.3.0
Set-StrictMode
csak abban a hatókörben érvényes, amelyben a gyermekhatókörben van beállítva. A PowerShell hatóköreiről további információt a about_Scopes című témakörben talál.