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 à appliquer.
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. Ensuite, 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 de$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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
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)
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.
Cette commande active le mode strict et la 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 de la version 2.0
mode strict.
Sans version 2.0
mode strict, la valeur (3,4)
est interprétée comme un objet de tableau unique auquel rien n’est ajouté. Avec la version 2.0
mode strict, elle est correctement interprétée comme une syntaxe défectueuse pour envoyer deux valeurs.
Sans version 2.0
, la référence à la propriété Month inexistante d’une chaîne ne retourne que $Null
. Avec 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)
$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."
Avec le mode strict défini sur la version 3
ou une version 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. Un nombre supérieur à 3
est traité comme Latest
. La valeur fournie doit être la chaîne Latest
ou une chaîne qui peut être convertie en type System.Version. La version doit correspondre à une version de version valide de PowerShell.
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.
Latest
- 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.
Prudence
L’utilisation de Latest
pour version dans les scripts n’est pas déterministe. La signification de Latest
peut changer dans les nouvelles versions de PowerShell. Un script écrit pour une version antérieure de PowerShell qui utilise Set-StrictMode -Version Latest
est soumis à des règles plus restrictives lors de l’exécution dans une version plus récente de 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 les objets vers cette applet de commande.
Sorties
None
Cette applet de commande ne retourne aucune sortie.
Notes
Bien que le paramètre Version accepte des valeurs supérieures à 3.0
, aucune règle supplémentaire n’est définie pour une valeur supérieure à 3.0
.
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.