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 Set-StrictMode de commande 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 l’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.

Quand Set-StrictMode elle est désactivée, PowerShell a les comportements suivants :

  • Les variables non initialisées sont supposées avoir une valeur ( 0 zéro) ou $Null, selon le type
  • Références aux propriétés inexistantes renvoyées $Null
  • Les résultats d’une syntaxe de fonction incorrecte varient selon les conditions d’erreur
  • 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."
$null -eq $string.Month

True

Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month

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 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 du mode strict de version 2.0 .

Sans mode strict de version 2.0 , la (3,4) valeur est interprétée comme un objet tableau unique auquel rien n’est ajouté. Avec le mode strict de version 2.0 , il est correctement interprété comme une syntaxe défectueuse pour envoyer deux valeurs.

Sans version2.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 Désactivé, non valide ou hors limites, le résultat renvoie 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']

Index was outside the bounds of the array.
At line:1 char:1
+ $null -eq $a[2]
+ ~~~~~~~~~~~~~~~
    + 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
+ $null -eq $a['abc']
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

Avec le mode strict défini sur version 3 ou 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. N’importe quel 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.

Attention

L’utilisation Latest de 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 pas de sortie.

Notes

Bien que le paramètre Version accepte des valeurs supérieures 3.0à , il n’existe aucune règle supplémentaire définie pour quelque chose de supérieur à 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.