À propos de l’analyse
DESCRIPTION COURTE
Décrit comment PowerShell analyse les commandes.
DESCRIPTION DÉTAILLÉE
Lorsque vous entrez une commande à l’invite de commandes, PowerShell décompose le texte de la commande en une série de segments appelés « jetons », puis détermine comment interpréter chaque « jeton ».
Par exemple, si vous tapez :
livre Write-Host
PowerShell décompose la commande suivante en deux jetons, « Write-Host » et « book », et interprète chaque jeton indépendamment.
Lors du traitement d’une commande, l’analyseur PowerShell fonctionne en mode expression ou en mode argument :
En mode expression, les valeurs de chaîne de caractères doivent être contenues entre guillemets. Les nombres non placés entre guillemets sont traités comme des valeurs numériques (plutôt que comme une série de caractères).
En mode argument, chaque valeur est traitée comme une chaîne extensible, sauf si elle commence par l’un des caractères spéciaux suivants : signe dollar ($), au signe (@), guillemet unique ('), guillemet double ("), ou parenthèse ouvrante (().
Si elle est précédée de l’un de ces caractères, la valeur est traitée comme une expression de valeur.
Le tableau suivant fournit plusieurs exemples de commandes traitées en mode expression et en mode argument, ainsi que les résultats générés par ces commandes.
Exemple | Mode | Résultats |
---|---|---|
2+2 | Expression | 4 (entier) |
Write-Output 2+2 | Argument | « 2+2 » (chaîne) |
Write-Output (2+2) | Expression | 4 (entier) |
$a = 2+2 | Expression | $a = 4 (entier) |
Write-Output $a | Expression | 4 (entier) |
Write-Output $a/H | Argument | « 4/H » (chaîne) |
Chaque jeton peut être interprété comme un type d’objet quelconque, tel que Boolean ou string. PowerShell tente de déterminer le type d’objet à partir de l’expression. Le type d’objet dépend du type de paramètre attendu par une commande et de la façon dont PowerShell sait convertir l’argument au type correct. Le tableau suivant présente plusieurs exemples des types attribués aux valeurs retournées par les expressions.
Exemple | Mode | Résultats |
---|---|---|
Write-Output !1 | argument | « !1 » (chaîne) |
Write-Output ( !1) | expression | False (Boolean) |
Write-Output (2) | expression | 2 (entier) |
Le symbole d’arrêt de l’analyse (-- %), introduit dans PowerShell 3.0, indique à PowerShell de s’abstenir d’interpréter l’entrée en tant que commandes ou expressions PowerShell.
Lorsque vous appelez un programme exécutable dans PowerShell, placez le symbole d’arrêt d’analyse avant les arguments du programme. Cette technique est beaucoup plus facile que l’utilisation de caractères d’échappement pour éviter une mauvaise interprétation.
Lorsqu’il rencontre un symbole d’arrêt d’analyse, PowerShell traite les caractères restants dans la ligne comme un littéral. La seule interprétation qu’il effectue consiste à substituer des valeurs aux variables d’environnement qui utilisent la notation Windows standard, comme %USERPROFILE%.
Le symbole d’arrêt d’analyse n’est effectif que jusqu’au caractère de ligne ou de pipeline suivant. Vous ne pouvez pas utiliser un caractère de continuation (') pour étendre son effet ou utiliser un délimiteur de commande (;) pour mettre fin à son effet.
Par exemple, la commande suivante appelle le programme Icacls.
icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
Pour exécuter cette commande dans PowerShell 2.0, vous devez utiliser des caractères d’échappement pour empêcher PowerShell d’interpréter mal les parenthèses.
icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F
À partir de PowerShell 3.0, vous pouvez utiliser le symbole d’arrêt de l’analyse.
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
PowerShell envoie la chaîne de commande suivante au programme Icacls :
X :\VMS /grant Dom\HVAdmin :(CI)(OI)F