Share via


Set-StrictMode

Établit et applique des règles de codage dans les expressions, les scripts et les blocs de script.

Syntax

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 recommandées de base.

Utilisez le paramètre Version pour déterminer les règles de codage appliquées.

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. Par conséquent, vous pouvez l’utiliser dans un script ou une fonction pour remplacer le paramètre hérité de l’étendue globale.

Quand 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 à des 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 version 1.0, les tentatives de référence de 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 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 version 2.0 .

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

Sans version 2.0, la référence à la propriété Month inexistante d’une chaîne retourne uniquement $Null. En utilisant la version 2.0, il est interprété 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é, les index non valides ou hors limites renvoient 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
$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 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
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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. Tout 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 valide de PowerShell.

Les valeurs effectives de 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 à des variables non initialisées. Cela inclut les variables non initialisées dans les chaînes.
    • Interdit les références à des propriétés inexistantes d’un objet.
    • Interdit les appels de fonction qui utilisent la syntaxe pour les méthodes d’appel.
  • 3.0
    • Interdit les références à des variables non initialisées. Cela inclut les variables non initialisées dans les chaînes.
    • Interdit les références à des propriétés inexistantes d’un objet.
    • Interdit les appels de fonction qui utilisent la syntaxe pour les méthodes d’appel.
    • Interdire les index hors limites ou les index tableaux 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 disponible la plus stricte, même lorsque de nouvelles versions sont ajoutées à PowerShell.

Attention

Utilisation d’une version de Latest dans les scripts. La signification de Latest peut changer dans les nouvelles versions de PowerShell. Par conséquent, 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
Aliases:v
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Entrées

None

Vous ne pouvez pas diriger d'entrée vers cette applet de commande.

Sorties

None

Cette applet de commande ne retourne aucune sortie.

Notes

Bien que Set-StrictMode le paramètre Version accepte des valeurs supérieures à 3.0, il n’existe actuellement aucune règle supplémentaire définie pour une valeur supérieure à 3.0.

Set-StrictMode n’est efficace que dans l’étendue dans laquelle il est défini et dans ses étendues enfants. Pour plus d’informations sur les étendues dans PowerShell, consultez about_Scopes.