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 $Nulltí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.0van á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.0nélkül a sztring nem létező Hónap tulajdonságára való hivatkozás csak $Null. A verzióban a rendszer 2.0helyesen é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.

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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 Latestszá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.

Type:Version
Aliases:v
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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.