Partager via


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.