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 határozza meg a kikényszeríteni kívánt kódolási szabályokat.

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. 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ést követi:

  • Az nem inicializált változók típustól függően 0 (nulla) vagy $Nullértékkel rendelkeznek
  • 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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.

A szigorú mód 1.0verzió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)
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.

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

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

A 2.0verzió nélkül a sztring nem létező Hónap tulajdonságára való hivatkozás csak $Nullad vissza. A 2.0verzió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)
$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']
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."

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 Latestkezeli. A megadott értéknek Latest vagy System.Version típussá konvertálható 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.

Figyelmeztetés

Az Latest használata verzió szkriptekben nem determinisztikus. A Latest jelentése változhat a PowerShell új kiadásaiban. A PowerShell egy régebbi, Set-StrictMode -Version Latest használó verziójához írt szkriptre szigorúbb szabályok vonatkoznak, amikor a PowerShell újabb verzióiban futnak.

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 lehet objektumokat csövezni.

Kimenetek

None

Ez a parancsmag nem ad vissza kimenetet.

Jegyzetek

Bár a Verzió paraméter a 3.0értéknél nagyobb értékeket fogad el, a 3.0-nél magasabbra nincs meghatározva további szabály.

Set-StrictMode csak a gyermek hatókörében és hatókörében érvényes. A PowerShell hatóköreiről további információt a about_Scopescímű témakörben talál.