Megosztás a következőn keresztül:


Set-StrictMode

Kódolási szabályokat hoz létre és kényszerít ki kifejezésekben, szkriptekben és szkriptblokkokban.

Syntax

Version (Alapértelmezett)

Set-StrictMode
    -Version <Version>
    [<CommonParameters>]

Off

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 állapítsa meg, hogy mely kódolási szabályok legyenek kényszerítve.

Set-PSDebug -Strict 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. Ezért használhatja egy szkriptben vagy függvényben 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ést követi:

  • A nem inicializált változók értéke típustól függően 0 (nulla) vagy $Null
  • A nem létező tulajdonságokra mutató hivatkozások $Null
  • A helytelen függvényszintaxis eredménye a hibafeltételek függvényében változik
  • Ha egy tömbben érvénytelen index használatával próbál értéket lekérni, az $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 1.0-s verzióra 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."
$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

Ez a parancs bekapcsolja a szigorú módot, és a 2.0-s verzióra á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 2.0-s verzió szigorú módjának hatását mutatja.

A 2.0-s verzió szigorú módja nélkül a "(3,4)" értéket egyetlen tömbobjektumként értelmezi a rendszer, amelyhez semmit sem ad hozzá. A 2.0-s verzió szigorú módjának használatával a rendszer helyesen értelmezi hibás szintaxisként két érték beküldéséhez.

A 2.0-s verzió nélkül a sztring nem létező Hónap tulajdonságára való hivatkozás csak $Nullad vissza. A 2.0-s verzióval a rendszer 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, akkor az indexek érvénytelen vagy kívül esik, az eredmény null értékeket ad vissza.

# 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

Ha a szigorú mód 3- vagy újabb verzióra 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.

Paramétertulajdonságok

Típus:SwitchParameter
Alapértelmezett érték:None
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

Off
Position:Named
Kötelező:True
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték: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 3-nál nagyobb számokat a legújabbkezeli.

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.
  • Legkésőbbi
    • 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.

Paramétertulajdonságok

Típus:Version
Alapértelmezett érték:None
Támogatja a helyettesítő karaktereket:False
DontShow:False
Aliasok:v

Paraméterkészletek

Version
Position:Named
Kötelező:True
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték:False

CommonParameters

Ez a parancsmag a következő gyakori paramétereket támogatja: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction és -WarningVariable. További információért lásd about_CommonParameters.

Bevitelek

None

Ehhez a parancsmaghoz nem csövezhet be bemenetet.

Kimenetek

None

Ez a parancsmag nem ad vissza kimenetet.

Jegyzetek

Set-StrictMode csak abban a hatókörben érvényes, amelyben be van állítva, és a gyermek hatóköreiben. A PowerShell hatóköreiről további információt a about_Scopescímű témakörben talál.