Dela via


Set-StrictMode

Upprättar och framtvingar kodningsregler i uttryck, skript och skriptblock.

Syntax

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

Description

Cmdleten Set-StrictMode konfigurerar strikt läge för det aktuella omfånget och alla underordnade omfång och aktiverar och inaktiverar det. När strikt läge är aktiverat genererar PowerShell ett avslutande fel när innehållet i ett uttryck, skript eller skriptblock bryter mot grundläggande kodningsregler för bästa praxis.

Använd parametern Version för att avgöra vilka kodningsregler som tillämpas.

Set-PSDebug -Strict cmdlet aktiverar strikt läge för det globala omfånget. Set-StrictMode påverkar endast det aktuella omfånget och dess underordnade omfång. Därför kan du använda den i ett skript eller en funktion för att åsidosätta inställningen som ärvts från det globala omfånget.

När Set-StrictMode är avstängd har PowerShell följande beteenden:

  • Uninitialiserade variabler antas ha värdet 0 (noll) eller $Null, beroende på typ
  • Referenser till icke-existerande egenskaper returnerar $Null
  • Resultatet av felaktig funktionssyntax varierar med felvillkoren
  • Om du försöker hämta ett värde med ett ogiltigt index i en matris returneras $Null

Exempel

Exempel 1: Aktivera strikt läge som version 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

Med strikt läge inställt på version 1.0, försök att referera till variabler som inte initieras misslyckas.

Exempel 2: Aktivera strikt läge som version 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."
$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

Det här kommandot aktiverar strikt läge och anger det till version 2.0. Därför returnerar PowerShell ett fel om du använder metodsyntax, som använder parenteser och kommatecken, för ett funktionsanrop eller en referens för oinitierade variabler eller icke-existerande egenskaper.

Exempelutdata visar effekten av strikt läge för version 2.0.

Utan strikt läge i version 2.0 tolkas värdet "(3,4)" som ett enda matrisobjekt som ingenting läggs till i. Genom att använda strikt läge i version 2.0 tolkas det korrekt som felaktig syntax för att skicka två värden.

Utan version 2.0 returnerar referensen till egenskapen non-existent Month för en sträng endast $Null. Med version 2.0 tolkas den korrekt som ett referensfel.

Exempel 3: Aktivera strikt läge som version 3.0

Med strikt läge inställt på Avreturnerar ogiltiga index eller utanför gränserna null-värden.

# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']

True
True

Set-StrictMode -Version 3
$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

Med strikt läge inställt på version 3 eller senare resulterar ogiltiga index eller utanför gränserna i fel.

Parametrar

-Off

Anger att den här cmdleten inaktiverar strikt läge för det aktuella omfånget och alla underordnade omfång.

Typ:SwitchParameter
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Version

Anger de villkor som orsakar ett fel i strikt läge. Den här parametern accepterar ett giltigt PowerShell-versionsnummer. Ett tal som är högre än 3 behandlas som senaste.

De effektiva värdena för den här parametern är:

  • 1.0
    • Förbjuder referenser till onitialiserade variabler, förutom onitialiserade variabler i strängar.
  • 2.0
    • Förbjuder referenser till onitialiserade variabler. Detta inkluderar onitialiserade variabler i strängar.
    • Förbjuder referenser till icke-existerande egenskaper för ett objekt.
    • Förbjuder funktionsanrop som använder syntaxen för anropande metoder.
  • 3.0
    • Förbjuder referenser till onitialiserade variabler. Detta inkluderar onitialiserade variabler i strängar.
    • Förbjuder referenser till icke-existerande egenskaper för ett objekt.
    • Förbjuder funktionsanrop som använder syntaxen för anropande metoder.
    • Förhindra utanför gränserna eller olösliga matrisindex.
  • Senaste
    • Väljer den senaste tillgängliga versionen. Den senaste versionen är den mest strikta. Använd det här värdet för att se till att skript använder den striktaste tillgängliga versionen, även när nya versioner läggs till i PowerShell.

Försiktighet

Använda en version av senaste i skript. Innebörden av senaste kan ändras i nya versioner av PowerShell. Ett skript som skrivits för en äldre version av PowerShell och som använder Set-StrictMode -Version Latest omfattas därför av mer restriktiva regler när det körs i en nyare version av PowerShell.

Typ:Version
Alias:v
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

None

Du kan inte skicka indata till den här cmdleten.

Utdata

None

Den här cmdleten returnerar inga utdata.

Kommentarer

Set-StrictMode är endast effektivt i omfånget där det anges och i dess underordnade omfång. Mer information om omfång i PowerShell finns i about_Scopes.