Set-StrictMode
Établit et applique des règles de codage dans les expressions, les scripts et les blocs de script.
Syntaxe
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
L’applet de commande Set-StrictMode
configure le mode strict pour l’étendue actuelle et toutes les étendues enfants, puis l’active et la désactive. Lorsque le mode strict est activé, PowerShell génère une erreur de fin lorsque le contenu d’une expression, d’un script ou d’un bloc de script enfreint les règles de codage de base.
Utilisez le paramètre Version pour déterminer les règles de codage appliquées.
Set-PSDebug -Strict
applet de commande active le mode strict pour l’étendue globale.
Set-StrictMode
affecte uniquement l’étendue actuelle et ses étendues enfants. Par conséquent, vous pouvez l’utiliser dans un script ou une fonction pour remplacer le paramètre hérité de l’étendue globale.
Lorsque Set-StrictMode
est désactivé, PowerShell a les comportements suivants :
- Les variables non initialisées sont supposées avoir une valeur de 0 (zéro) ou
$Null
, selon le type - Les références aux propriétés inexistantes retournent
$Null
- Les résultats d’une syntaxe de fonction incorrecte varient selon les conditions d’erreur
- La tentative de récupération d’une valeur à l’aide d’un index non valide dans un tableau retourne
$Null
Exemples
Exemple 1 : Activer le mode strict en tant que 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
Avec le mode strict défini sur la version 1.0, tente de référencer des variables qui ne sont pas initialisées échouent.
Exemple 2 : Activer le mode strict en tant que 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."
$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
Cette commande active le mode strict et le définit sur la version 2.0. Par conséquent, PowerShell retourne une erreur si vous utilisez la syntaxe de méthode, qui utilise des parenthèses et des virgules, pour un appel de fonction ou référencer des variables non initialisées ou des propriétés inexistantes.
L’exemple de sortie montre l’effet du mode strict de la version 2.0.
Sans mode strict de la version 2.0, la valeur « (3,4) » est interprétée comme un objet de tableau unique auquel rien n’est ajouté. En utilisant le mode strict version 2.0, il est correctement interprété comme une syntaxe défectueuse pour envoyer deux valeurs.
Sans la version 2.0, la référence à la propriété Month inexistante d’une chaîne retourne uniquement $Null
. À l’aide de la version 2.0, elle est interprétée correctement comme une erreur de référence.
Exemple 3 : Activer le mode strict en tant que version 3.0
Avec le mode strict défini sur Off, les index non valides ou hors limites retournent des valeurs Null.
# 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
Avec le mode strict défini sur la version 3 ou ultérieure, les index non valides ou hors limites entraînent des erreurs.
Paramètres
-Off
Indique que cette applet de commande désactive le mode strict pour l’étendue actuelle et toutes les étendues enfants.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Version
Spécifie les conditions qui provoquent une erreur en mode strict. Ce paramètre accepte n’importe quel numéro de version PowerShell valide. N’importe quel nombre supérieur à 3 est traité comme dernière.
Les valeurs effectives pour ce paramètre sont les suivantes :
- 1.0
- Interdit les références aux variables non initialisées, à l’exception des variables non initialisées dans les chaînes.
- 2.0
- Interdit les références aux variables non initialisées. Cela inclut des variables non initialisées dans des chaînes.
- Interdit les références aux propriétés inexistantes d’un objet.
- Interdit les appels de fonction qui utilisent la syntaxe pour appeler des méthodes.
- 3.0
- Interdit les références aux variables non initialisées. Cela inclut des variables non initialisées dans des chaînes.
- Interdit les références aux propriétés inexistantes d’un objet.
- Interdit les appels de fonction qui utilisent la syntaxe pour appeler des méthodes.
- Interdire les index de tableau hors limites ou non résolus.
- Dernier
- Sélectionne la dernière version disponible. La dernière version est la plus stricte. Utilisez cette valeur pour vous assurer que les scripts utilisent la version la plus stricte disponible, même lorsque de nouvelles versions sont ajoutées à PowerShell.
Type: | Version |
Alias: | v |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
Entrées
None
Vous ne pouvez pas diriger l’entrée vers cette applet de commande.
Sorties
None
Cette applet de commande ne retourne aucune sortie.
Notes
Set-StrictMode
est efficace uniquement dans l’étendue dans laquelle elle est définie et dans ses étendues enfants. Pour plus d’informations sur les étendues dans PowerShell, consultez about_Scopes.