Set-StrictMode
Upprättar och tillämpar 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 strider 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 inaktiverat har PowerShell följande beteenden:
- Oinitierade variabler antas ha värdet 0 (noll) eller
$Null
, beroende på typ - Referenser till obefintliga egenskaper returneras
$Null
- Resultatet av felaktig funktionssyntax varierar med felvillkoren
- Försök att 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 misslyckas försök att referera till variabler som inte initieras.
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 ställer in det på 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 till oinitierade variabler eller icke-existerande egenskaper.
Exempelutdata visar effekten av strikt version 2.0-läge.
Utan strikt läge i version 2.0 tolkas värdet "(3,4)" som ett enda matrisobjekt som inget läggs till i. Med 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 hjälp av version 2.0 tolkas det korrekt som ett referensfel.
Exempel 3: Aktivera strikt läge som version 3.0
Med strikt läge inställt på Av returnerar ett ogiltigt eller utanför bundet index 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 högre resulterar ogiltiga index eller utanför gränserna i fel.
Parametrar
-Off
Anger att denna cmdlet inaktiverar strikt läge för det aktuella omfånget och alla underordnade omfång.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | 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 oinitierade variabler, förutom oinitierade variabler i strängar.
- 2.0
- Förbjuder referenser till oinitierade variabler. Detta inkluderar oinitierade variabler i strängar.
- Förhindrar referenser till icke-existerande egenskaper för ett objekt.
- Förbjuder funktionsanrop som använder syntaxen för att anropa metoder.
- 3.0
- Förbjuder referenser till oinitierade variabler. Detta inkluderar oinitierade variabler i strängar.
- Förhindrar referenser till icke-existerande egenskaper för ett objekt.
- Förbjuder funktionsanrop som använder syntaxen för att anropa metoder.
- Förhindra utanför gränserna eller olösbara matrisindex.
- Senast
- 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 skripten använder den striktaste tillgängliga versionen, även när nya versioner läggs till i PowerShell.
Varning
Använda en version av senaste i skript. Innebörden av Senaste kan ändras i nya versioner av PowerShell. Därför omfattas ett skript som skrivits för en äldre version av PowerShell som använder Set-StrictMode -Version Latest
mer restriktiva regler när det körs i en nyare version av PowerShell.
Type: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indata
None
Du kan inte skicka indata till denna cmdlet.
Utdata
None
Denna cmdlet returnerar inga utdata.
Kommentarer
Set-StrictMode
är endast effektivt i det omfång som det anges i och i dess underordnade omfång. Mer information om omfång i PowerShell finns i about_Scopes.