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 fastställa vilka kodningsregler som ska 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. Sedan 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 av 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
- Försök att hämta ett värde med ett ogiltigt index i en matris returnerar
$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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
Med strikt läge inställt på version 1.0
försöker 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)
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.
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 för oinitierade variabler eller icke-existerande egenskaper.
Exempelutdata visar effekten av strikt versionsläge 2.0
.
Utan strikt versionsläge 2.0
(3,4)
tolkas värdet som ett enda matrisobjekt som inget läggs till i. Med strikt versionsläge 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å Av returnerar 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.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."
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 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 Latest
. Det angivna värdet måste vara strängen Latest
eller en sträng som kan konverteras till en System.Version-typ . Versionen måste matcha en giltig version av PowerShell.
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.
Latest
- 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.
Varning
Det är inte deterministiskt att använda Latest
för version i skript. Innebörden av Latest
kan ändras i nya versioner av PowerShell. Ett skript som skrivits för en äldre version av PowerShell som använder Set-StrictMode -Version Latest
omfattas 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 objekt till den här cmdleten.
Utdata
None
Den här cmdleten returnerar inga utdata.
Kommentarer
Även om parametern Version accepterar värden som är större än 3.0
, finns det inga ytterligare regler som definierats för något högre än 3.0
.
Set-StrictMode
är endast effektivt i det omfång som anges i och i dess underordnade omfång. Mer information om omfång i PowerShell finns i about_Scopes.