Delen via


Set-StrictMode

Hiermee worden coderingsregels in expressies, scripts en scriptblokken vastgelegd en afgedwongen.

Syntaxis

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

Description

De cmdlet Set-StrictMode configureert de strikte modus voor het huidige bereik en alle onderliggende bereiken en schakelt deze in en uit. Wanneer de strikte modus is ingeschakeld, genereert PowerShell een afsluitfout wanneer de inhoud van een expressie, script of scriptblok in strijd is met de basisregels voor best practice-codering.

Gebruik de parameter Version om te bepalen welke coderingsregels worden afgedwongen.

Set-PSDebug -Strict cmdlet de strikte modus inschakelt voor het globale bereik. Set-StrictMode is alleen van invloed op het huidige bereik en de onderliggende bereiken. Daarom kunt u deze gebruiken in een script of functie om de instelling te overschrijven die is overgenomen van het globale bereik.

Wanneer Set-StrictMode is uitgeschakeld, heeft PowerShell het volgende gedrag:

  • Niet-geïnitialiseerde variabelen worden verondersteld een waarde van 0 (nul) of $Nullte hebben, afhankelijk van het type
  • Verwijzingen naar niet-bestaande eigenschappen retourneren $Null
  • De resultaten van een onjuiste functiesyntaxis variëren met de foutvoorwaarden
  • Als u een waarde probeert op te halen met een ongeldige index in een matrix, wordt $Null

Voorbeelden

Voorbeeld 1: Strikte modus inschakelen als versie 1.0

# 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

Als de strikte modus is ingesteld op versie 1.0, wordt geprobeerd te verwijzen naar variabelen die niet zijn geïnitialiseerd.

Voorbeeld 2: Strikte modus inschakelen als versie 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)

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

Met deze opdracht schakelt u de strikte modus in en stelt u deze in op versie 2.0. Als gevolg hiervan retourneert PowerShell een fout als u de syntaxis van de methode gebruikt, waarbij haakjes en komma's worden gebruikt voor een functieaanroep of verwijzing naar niet-geïnitialiseerde variabelen of niet-bestaande eigenschappen.

In de voorbeelduitvoer ziet u het effect van versie 2.0 strikte modus.

Zonder versie 2.0 strikte modus wordt de waarde '(3,4)' geïnterpreteerd als één matrixobject waaraan niets wordt toegevoegd. Door de strikte modus van versie 2.0 te gebruiken, wordt deze correct geïnterpreteerd als foutieve syntaxis voor het verzenden van twee waarden.

Zonder versie 2.0 retourneert de verwijzing naar de niet-bestaande eigenschap Month van een tekenreeks alleen $Null. Door versie 2.0 te gebruiken, wordt deze correct geïnterpreteerd als een verwijzingsfout.

Voorbeeld 3: Strikte modus inschakelen als versie 3.0

Als de strikte modus is ingesteld op Uit, retourneert het resultaat ongeldige of niet-afhankelijke indexen null-waarden.

# 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

Als de strikte modus is ingesteld op versie 3 of hoger, leiden ongeldige indexen of indexen buiten de grenzen tot fouten.

Parameters

-Off

Geeft aan dat deze cmdlet de strikte modus uitschakelt voor het huidige bereik en alle onderliggende bereiken.

Type:SwitchParameter
Position:Named
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Version

Hiermee geeft u de voorwaarden op die een fout veroorzaken in de strikte modus. Deze parameter accepteert een geldig PowerShell-versienummer. Een getal dat hoger is dan 3 wordt behandeld als Meest recente.

De effectieve waarden voor deze parameter zijn:

  • 1.0
    • Verbiedt verwijzingen naar niet-geïnitialiseerde variabelen, met uitzondering van niet-geïnitialiseerde variabelen in tekenreeksen.
  • 2.0
    • Verbiedt verwijzingen naar niet-geïnitialiseerde variabelen. Dit omvat niet-geïnitialiseerde variabelen in tekenreeksen.
    • Verbiedt verwijzingen naar niet-bestaande eigenschappen van een object.
    • Hiermee worden functie-aanroepen verboden die gebruikmaken van de syntaxis voor het aanroepen van methoden.
  • 3.0
    • Verbiedt verwijzingen naar niet-geïnitialiseerde variabelen. Dit omvat niet-geïnitialiseerde variabelen in tekenreeksen.
    • Verbiedt verwijzingen naar niet-bestaande eigenschappen van een object.
    • Hiermee worden functie-aanroepen verboden die gebruikmaken van de syntaxis voor het aanroepen van methoden.
    • Verbied buiten grenzen of onoplosbare matrixindexen.
  • Laatst
    • Hiermee selecteert u de nieuwste versie die beschikbaar is. De nieuwste versie is de meest strikte. Gebruik deze waarde om ervoor te zorgen dat scripts de strikt beschikbare versie gebruiken, zelfs wanneer nieuwe versies worden toegevoegd aan PowerShell.
Type:Version
Aliassen:v
Position:Named
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

None

U kunt invoer voor deze cmdlet niet doorsluisen.

Uitvoerwaarden

None

Deze cmdlet retourneert geen uitvoer.

Notities

Set-StrictMode is alleen van kracht in het bereik waarin het is ingesteld en in de onderliggende bereiken. Zie about_Scopesvoor meer informatie over bereiken in PowerShell.