about_Quoting_Rules
Kurze Beschreibung
Beschreibt Regeln für die Verwendung von einfachen und doppelten Anführungszeichen in PowerShell.
Lange Beschreibung
Beim Analysieren sucht PowerShell zunächst, eingaben als Ausdruck zu interpretieren. Wenn jedoch ein Befehlsaufruf auftritt, wird die Analyse im Argumentmodus fortgesetzt. Nicht numerische Argumente ohne Anführungszeichen werden als Zeichenfolgen behandelt. Wenn Sie Argumente haben, die Leerzeichen enthalten, z. B. Pfade, müssen Sie diese Argumentwerte in Anführungszeichen setzen. Weitere Informationen zur Argumentanalyse finden Sie im Abschnitt "Argumentmodus " von about_Parsing.
Anführungszeichen werden verwendet, um eine Literalzeichenfolge anzugeben. Sie können eine Zeichenfolge in einfache Anführungszeichen () oder doppelte Anführungszeichen ('
"
) einschließen.
Anführungszeichen werden auch verwendet, um eine here-Zeichenfolge zu erstellen. Eine here-Zeichenfolge ist eine ein- oder doppelte Zeichenfolge, in der Anführungszeichen buchstäblich interpretiert werden. Eine here-Zeichenfolge kann mehrere Zeilen umfassen. Alle Zeilen in einer here-Zeichenfolge werden als Zeichenfolgen interpretiert, obwohl sie nicht in Anführungszeichen eingeschlossen sind.
In Befehlen für Remotecomputer definieren Anführungszeichen die Teile des Befehls, die auf dem Remotecomputer ausgeführt werden. In einer Remotesitzung bestimmen Anführungszeichen auch, ob die Variablen in einem Befehl zuerst auf dem lokalen Computer oder auf dem Remotecomputer interpretiert werden.
Hinweis
PowerShell behandelt intelligente Anführungszeichen, auch typografische oder geschweifte Anführungszeichen genannt, als normale Anführungszeichen für Zeichenfolgen. Verwenden Sie keine intelligenten Anführungszeichen, um Zeichenfolgen einzuschließen. Folgen Sie beim Schreiben von Zeichenfolgen, die intelligente Anführungszeichen enthalten, den Anweisungen in den Anführungszeichen in einem Zeichenfolgenabschnitt dieses Dokuments. Weitere Informationen zu intelligenten Anführungszeichen finden Sie im Abschnitt "Intelligente Anführungszeichen" im Wikipedia-Artikel Anführungszeichen in Englisch.
Doppelte Zeichenfolgen in Anführungszeichen
Eine in doppelte Anführungszeichen eingeschlossene Zeichenfolge ist eine erweiterbare Zeichenfolge. Variablennamen vor einem Dollarzeichen ($
) werden durch den Wert der Variablen ersetzt, bevor die Zeichenfolge an den Befehl zur Verarbeitung übergeben wird.
Zum Beispiel:
$i = 5
"The value of $i is $i."
Die Ausgabe dieses Befehls lautet:
The value of 5 is 5.
Außerdem werden in einer doppelt zitierten Zeichenfolge Ausdrücke ausgewertet, und das Ergebnis wird in die Zeichenfolge eingefügt. Zum Beispiel:
"The value of $(2+3) is 5."
Die Ausgabe dieses Befehls lautet:
The value of 5 is 5.
Nur einfache Variablenverweise können direkt in eine erweiterbare Zeichenfolge eingebettet werden. Variablenverweise mit Arrayindizierung oder Memberzugriff müssen in einen Unterausdruck eingeschlossen werden. Zum Beispiel:
"PS version: $($PSVersionTable.PSVersion)"
PS version: 5.1.22621.4111
Um einen Variablennamen von nachfolgenden Zeichen in der Zeichenfolge zu trennen, schließen Sie ihn in geschweifte Klammern ({}
) ein. Dies ist besonders wichtig, wenn auf den Variablennamen ein Doppelpunkt (:
) folgt. PowerShell berücksichtigt alles zwischen dem $
und dem :
Bereichsbezeichner, was in der Regel dazu führt, dass die Interpretation fehlschlägt. Löst z. B "$HOME: where the heart is."
. einen Fehler aus, funktioniert aber "${HOME}: where the heart is."
wie beabsichtigt.
Um die Ersetzung eines Variablenwerts in einer doppelt zitierten Zeichenfolge zu verhindern, verwenden Sie das Backtick-Zeichen (`
), bei dem es sich um das PowerShell-Escapezeichen handelt.
Im folgenden Beispiel verhindert das Backtick-Zeichen, das der ersten $i
Variablen vorausgeht, dass PowerShell den Variablennamen durch seinen Wert ersetzt.
Zum Beispiel:
$i = 5
"The value of `$i is $i."
Die Ausgabe dieses Befehls lautet:
The value of $i is 5.
Einfache Zeichenfolgen in An zitierten Zeichenfolgen
Eine in einfache Anführungszeichen eingeschlossene Zeichenfolge ist eine verbatimte Zeichenfolge. Die Zeichenfolge wird genau während der Eingabe an den Befehl übergeben. Es wird keine Ersetzung durchgeführt. Zum Beispiel:
$i = 5
'The value of $i is $i.'
Die Ausgabe dieses Befehls lautet:
The value $i is $i.
In ähnlicher Weise werden Ausdrücke in in an zitierten Zeichenfolgen nicht ausgewertet. Sie werden als Zeichenfolgenliterale interpretiert. Zum Beispiel:
'The value of $(2+3) is 5.'
Die Ausgabe dieses Befehls lautet:
The value of $(2+3) is 5.
Einschließen von Anführungszeichen in eine Zeichenfolge
Wenn Doppelte Anführungszeichen in einer Zeichenfolge angezeigt werden sollen, schließen Sie die gesamte Zeichenfolge in einfache Anführungszeichen ein. Zum Beispiel:
'As they say, "live and learn."'
Die Ausgabe dieses Befehls lautet:
As they say, "live and learn."
Sie können auch eine in Anführungszeichen gesetzte Zeichenfolge in eine doppelte Zeichenfolge einschließen. Zum Beispiel:
"As they say, 'live and learn.'"
Die Ausgabe dieses Befehls lautet:
As they say, 'live and learn.'
Oder doppeltippen Sie die Anführungszeichen um einen doppelt zitierten Ausdruck. Zum Beispiel:
"As they say, ""live and learn."""
Die Ausgabe dieses Befehls lautet:
As they say, "live and learn."
Verwenden Sie ein zweites aufeinander folgendes einfaches Anführungszeichen, um ein einfaches Anführungszeichen in eine einfache Zeichenfolge einzuschließen. Zum Beispiel:
'don''t'
Die Ausgabe dieses Befehls lautet:
don't
Um powerShell zu erzwingen, ein doppeltes Anführungszeichen wörtlich zu interpretieren, verwenden Sie ein Backtick-Zeichen. Dadurch wird verhindert, dass PowerShell das Anführungszeichen als Zeichenfolgentrennzeichen interpretiert. Zum Beispiel:
"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'
Da der Inhalt einzelner Zeichenfolgen buchstäblich interpretiert wird, wird das Backtick-Zeichen als Literalzeichen behandelt und in der Ausgabe angezeigt.
Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.
Da PowerShell intelligente Anführungszeichen wie ‘
, ’
, “
und ”
als normale Anführungszeichen interpretiert, müssen auch intelligente Anführungszeichen escapezeichen sein.
Zum Beispiel:
"Double ““smart quotation marks`” must be escaped in a double-quoted string."
'Single ‘‘smart quotation marks’’ must be escaped in a single-quoted string.'
Double “smart quotation marks” must be escaped in a double-quoted string.
Single ‘smart quotation marks’ must be escaped in a single-quoted string.
Hier-Zeichenfolgen
Die Anführungszeichen für hier-Zeichenfolgen unterscheiden sich geringfügig.
Eine here-Zeichenfolge ist eine ein- oder doppelte Zeichenfolge, die von Den Zeichen (@
) umgeben ist. Anführungszeichen innerhalb einer Hier-Zeichenfolge werden buchstäblich interpretiert.
Hier eine Zeichenfolge:
- erstreckt sich über mehrere Zeilen
- beginnt mit der Eröffnungsmarke, gefolgt von einer Neuen zeile
- endet mit einer neuen Zeile, gefolgt von der Schließendmarke
- enthält jede Zeile zwischen den öffnenden und schließenden Markierungen als Teil einer einzelnen Zeichenfolge.
Wie normale Zeichenfolgen werden Variablen durch ihre Werte in doppelt zitierten Zeichenfolgen ersetzt. Variablen werden in an dieser Stelle zitierten Zeichenfolgen nicht durch ihre Werte ersetzt.
Sie können hier Zeichenfolgen für jeden Text verwenden, aber sie sind besonders nützlich für die folgenden Arten von Text:
- Text, der literale Anführungszeichen enthält
- Mehrere Textzeilen, z. B. der Text in einem HTML- oder XML-Block
- Der Hilfetext für ein Skript- oder Funktionsdokument
Eine here-Zeichenfolge kann eines der folgenden Formate aufweisen, wobei <Enter>
das ausgeblendete Zeilenfeed- oder Zeilenumbruchzeichen dargestellt wird, das beim Drücken der EINGABETASTE hinzugefügt wird.
Doppelte Anführungszeichen:
@"<Enter>
<string> [string] ...<Enter>
"@
Einfache Anführungszeichen:
@'<Enter>
<string> [string] ...<Enter>
'@
Hinweis
Das letzte Neueinbruchzeichen ist Teil der Schlussmarke. Sie wird der hier-Zeichenfolge nicht hinzugefügt.
Eine here-Zeichenfolge enthält den gesamten Text zwischen den öffnenden und schließenden Markierungen. In der hier aufgeführten Zeichenfolge werden alle Anführungszeichen buchstäblich interpretiert. Zum Beispiel:
@"
For help, type "get-help"
"@
Die Ausgabe dieses Befehls lautet:
For help, type "get-help"
Die Verwendung einer hier-Zeichenfolge kann die Verwendung einer Zeichenfolge in einem Befehl vereinfachen. Zum Beispiel:
@"
Use a quotation mark, like ' or ", to begin a string.
"@
Die Ausgabe dieses Befehls lautet:
Use a quotation mark, like ' or ", to begin a string.
In hier zitierten Single-Zeichenfolgen werden Variablen buchstäblich interpretiert und genau reproduziert. Zum Beispiel:
@'
The $profile variable contains the path
of your PowerShell profile.
'@
Die Ausgabe dieses Befehls lautet:
The $profile variable contains the path
of your PowerShell profile.
In doppelt zitierten Hier-Zeichenfolgen werden Variablen durch ihre Werte ersetzt. Zum Beispiel:
@"
Even if you have not created a profile,
the path of the profile file is:
$profile.
"@
Die Ausgabe dieses Befehls lautet:
Even if you have not created a profile,
the path of the profile file is:
C:\Users\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.
Hier werden Zeichenfolgen in der Regel verwendet, um einer Variablen mehrere Zeilen zuzuweisen. Die folgende hier aufgeführte Zeichenfolge weist beispielsweise der variablen $page eine XML-Seite zu.
$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>
"@
Hier sind Zeichenfolgen auch ein bequemes Format für eingaben in das ConvertFrom-StringData
Cmdlet, das hier-Zeichenfolgen in Hashtabellen konvertiert.
Weitere Informationen finden Sie unter ConvertFrom-StringData
.
Hinweis
PowerShell ermöglicht es, doppelte oder ein zitierte Zeichenfolgen über mehrere Zeilen zu erstrecken, ohne die @
Syntax von hier-Zeichenfolgen zu verwenden. Vollständige Hier-Zeichenfolgensyntax ist jedoch die bevorzugte Verwendung.
Interpretation von erweiterbaren Zeichenfolgen
Erweiterte Zeichenfolgen sehen nicht unbedingt mit der Standardausgabe aus, die in der Konsole angezeigt wird.
Auflistungen, einschließlich Arrays, werden in Zeichenfolgen konvertiert, indem ein einzelnes Leerzeichen zwischen den Zeichenfolgendarstellungen der Elemente platziert wird. Ein anderes Trennzeichen kann durch Festlegen der Einstellungsvariable $OFS
angegeben werden. Weitere Informationen finden Sie in der Einstellungsvariable$OFS
.
Instanzen eines anderen Typs werden durch Aufrufen der ToString()
Methode in Zeichenfolgen konvertiert, was möglicherweise keine aussagekräftige Darstellung geben kann. Zum Beispiel:
"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable
Um die gleiche Ausgabe wie in der Konsole zu erhalten, verwenden Sie einen Unterausdruck, in dem Sie eine Pipe ausführen Out-String
. Wenden Sie die Trim()
Methode an, wenn Sie führende und nachfolgende leere Zeilen entfernen möchten.
"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name Value
---- -----
key value
Kultureinstellungen wirken sich auf die Zeichenfolgeninterpretation aus
Die ToString()
Methoden verwenden die aktuellen konfigurierten Kultureinstellungen, um Werte in Zeichenfolgen zu konvertieren. Beispielsweise wird die Kultur der folgenden PowerShell-Sitzung auf de-DE
. Wenn die ToString()
Methode den Wert einer $x
Zeichenfolge konvertiert, verwendet sie ein Komma (,
) für das Dezimaltrennzeichen. Außerdem konvertiert die ToString()
Methode das Datum in eine Zeichenfolge mit dem entsprechenden Format für die deutschen Gebietsschemaeinstellungen.The method converts the date to a string using the appropriate format for the german locale settings.
PS> Get-Culture
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
PS> $x = 1.2
PS> $x.ToString()
1,2
PS> (Get-Date 2024-03-19).ToString()
19.03.2024 00:00:00
PowerShell verwendet jedoch beim Interpretieren erweiterbarer Zeichenfolgenausdrücke die invariante Kultur.
PS? "$x"
1.2
PS> "$(Get-Date 2024-03-19)"
03/19/2024 00:00:00
Übergeben von Zeichenfolgen an externe Befehle
Einige systemeigene Befehle erwarten Argumente, die Anführungszeichen enthalten. PowerShell interpretiert die an zitierte Zeichenfolge, bevor sie an den externen Befehl übergeben wird. Diese Interpretation entfernt die äußeren Anführungszeichen.
Weitere Informationen zu diesem Verhalten finden Sie im about_Parsing Artikel.