Set-StrictMode
Hiermee worden coderingsregels in expressies, scripts en scriptblokken vastgelegd en afgedwongen.
Syntax
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
De Set-StrictMode
cmdlet 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 het coderen van best practices.
Gebruik de parameter Version om te bepalen welke coderingsregels worden afgedwongen.
Set-PSDebug -Strict
cmdlet schakelt strikte modus in 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 (nul) of
$Null
te hebben, afhankelijk van0
het type - Verwijzingen naar niet-bestaande eigenschappen retourneren
$Null
- Resultaten van onjuiste syntaxis van de functie variëren afhankelijk van de foutvoorwaarden
- Een poging om een waarde op te halen met behulp van een ongeldige index in een matrix, retourneert
$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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
Als de strikte modus is ingesteld op versie 1.0
, mislukken pogingen om 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)
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.
Met deze opdracht wordt de strikte modus ingeschakeld en ingesteld op versie 2.0
. Als gevolg hiervan retourneert PowerShell een fout als u de syntaxis van de methode gebruikt, die haakjes en komma's gebruikt, voor een functieaanroep of verwijzing naar niet-geïnitialiseerde variabelen of niet-bestaande eigenschappen.
De voorbeelduitvoer toont het effect van de strikte versiemodus 2.0
.
Zonder de strikte versiemodus 2.0
wordt de (3,4)
waarde geïnterpreteerd als één matrixobject waaraan niets wordt toegevoegd. Door de strikte versiemodus 2.0
te gebruiken, wordt deze correct geïnterpreteerd als een onjuiste syntaxis voor het verzenden van twee waarden.
Zonder versie 2.0
retourneert de verwijzing naar de niet-bestaande maandeigenschap 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, retourneren ongeldige indexen of indexen buiten de grenzen null-waarden.
# 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']
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."
Als de strikte modus is ingesteld op versie 3
of hoger, resulteren ongeldige of buiten de grenzen van indexen in fouten.
Parameters
-Off
Geeft aan dat met deze cmdlet de strikte modus wordt uitgeschakeld voor het huidige bereik en alle onderliggende bereiken.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Version
Hiermee geeft u de voorwaarden op die een fout veroorzaken in de strikte modus. Deze parameter accepteert elk geldig PowerShell-versienummer. Een getal dat hoger is dan 3
wordt behandeld als Latest
. De opgegeven waarde moet de tekenreeks Latest
zijn of een tekenreeks die kan worden geconverteerd naar een System.Version-type . De versie moet overeenkomen met een geldige versie van PowerShell.
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 die gebruikmaken van de syntaxis voor het aanroepen van methoden verboden.
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 die gebruikmaken van de syntaxis voor het aanroepen van methoden verboden.
- Buiten de grenzen of onoplosbare matrixindexen verbieden.
Latest
- Selecteert de meest recente versie die beschikbaar is. De nieuwste versie is het striktst. Gebruik deze waarde om ervoor te zorgen dat scripts de striktste beschikbare versie gebruiken, zelfs wanneer nieuwe versies worden toegevoegd aan PowerShell.
Waarschuwing
Een versie van Latest
gebruiken in scripts. De betekenis van Latest
kan veranderen in nieuwe versies van PowerShell. Daarom is een script dat is geschreven voor een oudere versie van PowerShell die wordt gebruikt Set-StrictMode -Version Latest
, onderworpen aan meer beperkende regels wanneer deze wordt uitgevoerd in een nieuwere versie van PowerShell.
Type: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
None
U kunt geen invoer doorspezen naar deze cmdlet.
Uitvoerwaarden
None
Deze cmdlet retourneert geen uitvoer.
Notities
Hoewel Set-StrictMode
de versieparameter waarden accepteert die groter zijn dan 3.0
, zijn er momenteel geen aanvullende regels gedefinieerd voor iets hoger dan 3.0
.
Set-StrictMode
is alleen effectief in het bereik waarin het is ingesteld en in de onderliggende bereiken. Zie about_Scopes voor meer informatie over bereiken in PowerShell.