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 guillemets doubles (").

Les guillemets sont également utilisés pour créer une chaîne here-string. Une chaîne here-string est une chaîne entre guillemets simples ou entre guillemets doubles dans laquelle les guillemets sont interprétés littéralement. Une chaîne here-string 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, les guillemets définissent les parties de la commande 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 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 directement incorporées 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.2.0

Pour séparer un nom de variable des caractères suivants dans la chaîne, placez-le d’accolades ({}). Cela est particulièrement important si le nom de la variable est suivi d’un signe deux-points (:). PowerShell prend en compte tout ce qui se trouve entre et $ le : spécificateur d’étendue, ce qui entraîne 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 de 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 entre guillemets simples est une chaîne textuelle . La chaîne est passée à la commande exactement au moment où vous la 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 les chaînes entre guillemets simples 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 unique 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 backtick. Cela empêche PowerShell d’interpréter le guillemet comme un 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 d’ici

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

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

Chaîne ci-dessous :

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

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

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

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

Une chaîne ci-dessous peut avoir l’un des formats suivants, où <Enter> représente le caractère masqué linefeed ou newline 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 nouvelle ligne finale fait partie de la marque de fermeture. Elle n’est pas ajoutée à la chaîne ici.

Une chaîne here-string contient tout le texte entre les marques d’ouverture et de fermeture. Dans la chaîne ci-dessous, 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 à guillemets simples, les variables sont interprétées littéralement et reproduites 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 here sont généralement utilisées pour affecter plusieurs lignes à une variable. Par exemple, la chaîne ci-dessous affecte une page de 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 here 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 à guillemets doubles ou simples de s’étendre sur plusieurs lignes sans utiliser la @ syntaxe des chaînes ici. Toutefois, la syntaxe de chaîne ici complète est l’utilisation préférée.

Interprétation des chaînes extensibles

Les chaînes développées ne sont pas nécessairement identiques à 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 autre séparateur peut être spécifié en définissant la variable $OFSde préférence . Pour plus d’informations, consultez la variable de $OFS préférence.

Les instances de tout 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 vers Out-String. 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 transmettre à la commande externe. Cette interprétation supprime les guillemets externes.

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

Voir aussi