about_Quoting_Rules

Description courte

Décrit les règles d’utilisation de guillemets simples et doubles dans PowerShell.

Description longue

Les guillemets sont utilisés pour spécifier une chaîne littérale. Vous pouvez placer une chaîne entre guillemets simples (') ou entre guillemets doubles (").

Les guillemets sont également utilisés pour créer une chaîne ici. Une chaîne ici est une chaîne entre guillemets simples ou entre guillemets doubles dans laquelle les guillemets sont interprétés littéralement. Une chaîne ici peut s’étendre sur plusieurs lignes. Toutes les lignes d’une chaîne ici sont interprétées comme des chaînes, même si elles ne sont pas placées entre guillemets.

Dans les commandes sur des ordinateurs distants, des guillemets définissent les parties de la commande qui sont exécutées sur l’ordinateur distant. Dans une session à distance, les guillemets déterminent également si les variables d’une commande sont interprétées en premier sur l’ordinateur local ou sur l’ordinateur distant.

Chaînes entre guillemets doubles

Une chaîne placée entre guillemets doubles est une chaîne extensible . Les noms de variables précédés d’un signe dollar ($) sont remplacés par la valeur de la variable avant que la chaîne ne soit passée à la commande pour traitement.

Par exemple :

$i = 5
"The value of $i is $i."

La sortie de cette commande est la suivante :

The value of 5 is 5.

En outre, dans une chaîne entre guillemets doubles, les expressions sont évaluées et le résultat est inséré dans la chaîne. Par exemple :

"The value of $(2+3) is 5."

La sortie de cette commande est la suivante :

The value of 5 is 5.

Seules les références de variables simples peuvent être incorporées directement dans une chaîne extensible. Les références de variables utilisant l’indexation de tableau ou l’accès aux membres doivent être placées dans une sous-expression. Par exemple :

"PS version: $($PSVersionTable.PSVersion)"
PS version: 7.1.4

Pour séparer un nom de variable des caractères suivants dans la chaîne, placez-le entre accolades ({}). Cela est particulièrement important si le nom de la variable est suivi d’un signe deux-points (:). PowerShell prend en compte tous les éléments entre le $: spécificateur d’étendue et le spécificateur d’étendue, ce qui provoque généralement l’échec de l’interprétation. Par exemple, "$HOME: where the heart is." lève une erreur, mais "${HOME}: where the heart is." fonctionne comme prévu.

Pour empêcher la substitution d’une valeur variable dans une chaîne entre guillemets doubles, utilisez le caractère backtick (`), qui est le caractère d’échappement PowerShell.

Dans l’exemple suivant, le caractère backtick qui précède la première $i variable empêche PowerShell de remplacer le nom de la variable par sa valeur. Par exemple :

$i = 5
"The value of `$i is $i."

La sortie de cette commande est la suivante :

The value of $i is 5.

Chaînes entre guillemets simples

Une chaîne placée entre guillemets simples est une chaîne textuelle . La chaîne est passée à la commande exactement comme vous le tapez. Aucune substitution n’est effectuée. Par exemple :

$i = 5
'The value of $i is $i.'

La sortie de cette commande est la suivante :

The value $i is $i.

De même, les expressions dans des chaînes entre guillemets uniques ne sont pas évaluées. Ils sont interprétés comme des littéraux de chaîne. Par exemple :

'The value of $(2+3) is 5.'

La sortie de cette commande est la suivante :

The value of $(2+3) is 5.

Inclusion de guillemets dans une chaîne

Pour faire apparaître des guillemets doubles dans une chaîne, placez la chaîne entière entre guillemets simples. Par exemple :

'As they say, "live and learn."'

La sortie de cette commande est la suivante :

As they say, "live and learn."

Vous pouvez également placer une chaîne entre guillemets simples dans une chaîne entre guillemets doubles. Par exemple :

"As they say, 'live and learn.'"

La sortie de cette commande est la suivante :

As they say, 'live and learn.'

Ou, doublez les guillemets autour d’une expression entre guillemets doubles. Par exemple :

"As they say, ""live and learn."""

La sortie de cette commande est la suivante :

As they say, "live and learn."

Pour inclure un guillemet simple dans une chaîne entre guillemets simples, utilisez un deuxième guillemet unique consécutif. Par exemple :

'don''t'

La sortie de cette commande est la suivante :

don't

Pour forcer PowerShell à interpréter un guillemet double littéralement, utilisez un caractère inverse. Cela empêche PowerShell d’interpréter le guillemet comme délimiteur de chaîne. Par exemple :

"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'

Étant donné que le contenu des chaînes entre guillemets simples est interprété littéralement, le caractère backtick est traité comme un caractère littéral et affiché dans la sortie.

Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.

Chaînes ici

Les règles de guillemets pour les chaînes ici sont légèrement différentes.

Une chaîne ici est une chaîne entre guillemets simples ou entre guillemets doubles entourée de signes (@). Les guillemets dans une chaîne ici sont interprétés littéralement.

Une chaîne ici :

  • s’étend sur plusieurs lignes
  • commence par la marque d’ouverture suivie d’une nouvelle ligne
  • se termine par une ligne de saut suivie de la marque de fermeture
  • inclut chaque ligne entre les marques d’ouverture et de fermeture dans le cadre d’une seule chaîne

Comme les chaînes régulières, les variables sont remplacées par leurs valeurs dans des chaînes ici entre guillemets doubles. Dans les chaînes ici entre guillemets simples, les variables ne sont pas remplacées par leurs valeurs.

Vous pouvez utiliser des chaînes ici pour n’importe quel texte, mais elles sont particulièrement utiles pour les types de texte suivants :

  • Texte qui contient des guillemets littéraux
  • Plusieurs lignes de texte, telles que le texte dans un bloc HTML ou XML
  • Texte d’aide pour un script ou un document de fonction

Une chaîne ici peut avoir l’un des formats suivants, où <Enter> représente le saut de ligne ou le caractère masqué de saut de ligne qui est ajouté lorsque vous appuyez sur la touche Entrée.

Guillemets doubles :

@"<Enter>
<string> [string] ...<Enter>
"@

Guillemets simples :

@'<Enter>
<string> [string] ...<Enter>
'@

Notes

Le caractère de saut de ligne final fait partie de la marque de fermeture. Elle n’est pas ajoutée à la chaîne ici.

Une chaîne ici contient tout le texte entre les marques d’ouverture et de fermeture. Dans la chaîne ici, tous les guillemets sont interprétés littéralement. Par exemple :

@"
For help, type "get-help"
"@

La sortie de cette commande est la suivante :

For help, type "get-help"

L’utilisation d’une chaîne ici peut simplifier l’utilisation d’une chaîne dans une commande. Par exemple :

@"
Use a quotation mark (') to begin a string.
"@

La sortie de cette commande est la suivante :

Use a quotation mark (') to begin a string.

Dans les chaînes ici entre guillemets simples, les variables sont interprétées littéralement et reproduits exactement. Par exemple :

@'
The $profile variable contains the path
of your PowerShell profile.
'@

La sortie de cette commande est la suivante :

The $profile variable contains the path
of your PowerShell profile.

Dans les chaînes ici entre guillemets doubles, les variables sont remplacées par leurs valeurs. Par exemple :

@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@

La sortie de cette commande est la suivante :

Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.

Les chaînes ici sont généralement utilisées pour affecter plusieurs lignes à une variable. Par exemple, la chaîne suivante affecte une page xml à la variable $page.

$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
        <command:name>
               Format-Table
        </command:name>
        <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
        </maml:description>
        <command:verb>format</command:verb>
        <command:noun>table</command:noun>
        <dev:version></dev:version>
</command:details>
...
</command:command>
"@

Les chaînes ici sont également un format pratique pour l’entrée dans l’applet ConvertFrom-StringData de commande, qui convertit les chaînes ici en tables de hachage. Pour plus d’informations, consultez ConvertFrom-StringData.

Notes

PowerShell permet aux chaînes double ou entre guillemets simples d’étendre plusieurs lignes sans utiliser la @ syntaxe des chaînes ici. Toutefois, la syntaxe complète de la chaîne ici est l’utilisation préférée.

Interprétation des chaînes extensibles

Les chaînes développées ne ressemblent pas nécessairement à la sortie par défaut que vous voyez dans la console.

Les collections, y compris les tableaux, sont converties en chaînes en plaçant un espace unique entre les représentations sous forme de chaîne des éléments. Un séparateur différent peut être spécifié en définissant une variable $OFSde préférence. Pour plus d’informations, consultez la variable de $OFS préférence.

Les instances d’un autre type sont converties en chaînes en appelant la ToString() méthode qui peut ne pas donner de représentation significative. Par exemple :

"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable

Pour obtenir la même sortie que dans la console, utilisez une sous-expression dans laquelle vous dirigez Out-Stringvers . Appliquez la Trim() méthode si vous souhaitez supprimer les lignes vides de début et de fin.

"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name                           Value
----                           -----
key                            value

Passage de chaînes entre guillemets à des commandes externes

Certaines commandes natives attendent des arguments qui contiennent des guillemets. PowerShell interprète la chaîne entre guillemets avant de la passer à la commande externe. Cette interprétation supprime les guillemets externes.

Pour plus d’informations sur ce comportement, consultez l’article about_Parsing .

Voir aussi