Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Redaktionelle Notiz
Wichtig
Die Windows PowerShell Language Specification 3.0 wurde im Dezember 2012 veröffentlicht und basiert auf Windows PowerShell 3.0. Diese Spezifikation spiegelt nicht den aktuellen Status von PowerShell wider. Es ist nicht geplant, diese Dokumentation zu aktualisieren, um den aktuellen Zustand widerzuspiegeln. Diese Dokumentation wird hier zur historischen Referenz vorgestellt.
Das Spezifikationsdokument ist als Microsoft Word-Dokument aus dem Microsoft Download Center unter: https://www.microsoft.com/download/details.aspx?id=36389 verfügbar. Dieses Word-Dokument wurde hier auf Microsoft Learn zur Anzeige konvertiert. Während der Konvertierung wurden einige redaktionelle Änderungen vorgenommen, um die Formatierung für die Docs-Plattform zu berücksichtigen. Einige Tippfehler und kleinere Fehler wurden korrigiert.
2.1 Grammatiken
Diese Spezifikation zeigt die Syntax der PowerShell-Sprache mit zwei Grammatiken. Die lexikalische Grammatik (§B.1) zeigt, wie Unicode-Zeichen kombiniert werden, um Zeilenterminatoren, Kommentare, Leerzeichen und Tokens zu bilden. Die syntaktische Grammatik (§B.2) zeigt, wie die aus der lexikalischen Grammatik resultierenden Token zu PowerShell-Skripts kombiniert werden.
Aus Gründen der Einfachheit werden Fragmente dieser Grammatiken an geeigneten Stellen in dieser Spezifikation repliziert.
Bei jeder Verwendung der Zeichen „a“ bis „z“ in den Grammatiken wird die Groß-/Kleinschreibung nicht beachtet. Dies bedeutet, dass die Groß-/Kleinschreibung in Variablen, Aliasen, Funktionsnamen, Schlüsselwörtern, Anweisungen und Operatoren ignoriert wird. Während dieser Spezifikation werden solche Namen jedoch in Kleinbuchstaben geschrieben, mit Ausnahme einiger automatischer und voreinstellungsvariabler Variablen.
2.2 Lexikalische Analyse
2.2.1 Skripts
Syntax:
Tipp
Die ~opt~ Notation in den Syntaxdefinitionen gibt an, dass die lexikalische Entität in der Syntax optional ist.
input:
input-elements~opt~ signature-block~opt~
input-elements:
input-element
input-elements input-element
input-element:
whitespace
comment
token
signature-block:
signature-begin signature signature-end
signature-begin:
new-line-character # SIG # Begin signature block new-line-character
signature:
base64 encoded signature blob in multiple single-line-comments
signature-end:
new-line-character # SIG # End signature block new-line-character
Beschreibung:
Der bei einem PowerShell-Translator eingehende Quellstream ist die Eingabe in ein Skript, das eine Sequenz von Unicode-Zeichen enthält. Die lexikalische Verarbeitung dieses Datenstroms umfasst die Reduzierung dieser Zeichen in eine Abfolge von Token, die zur Eingabe der syntaktischen Analyse werden.
Ein Skript ist eine Gruppe von PowerShell-Befehlen, die in einer Skriptdateigespeichert sind. Das Skript selbst hat, per se, keinen Namen und erhält seinen Namen aus der Quelldatei. Das Ende dieser Datei gibt das Ende des Skripts an.
Ein Skript kann optional eine digitale Signatur enthalten. Eine Hostumgebung ist nicht erforderlich, um Text zu verarbeiten, der auf eine Signatur folgt, oder etwas, das wie eine Signatur aussieht. Die Erstellung und Verwendung digitaler Signaturen wird von dieser Spezifikation nicht abgedeckt.
2.2.2 Zeilenabschlusszeichen
Syntax:
new-line-character:
Carriage return character (U+000D)
Line feed character (U+000A)
Carriage return character (U+000D) followed by line feed character (U+000A)
new-lines:
new-line-character
new-lines new-line-character
Beschreibung:
Wenn new-line-character-Elemente im Eingabequellstream vorkommen, teilen sie ihn in Zeilen auf, die z. B. für Fehlerberichterstattung und Erkennen des Endes eines einzeiligen Kommentars verwendet werden können.
Ein Zeilenabschlusszeichen kann als Leerraum behandelt werden (§2.2.4).
2.2.3 Kommentare
Syntax:
comment:
single-line-comment
requires-comment
delimited-comment
single-line-comment:
# input-characters~opt~
input-characters:
input-character
input-characters input-character
input-character:
Any Unicode character except a new-line-character
requires-comment:
#Requires whitespace command-arguments
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
dashdash:
dash dash
delimited-comment:
< # delimited-comment-text~opt~ hashes >
delimited-comment-text:
delimited-comment-section
delimited-comment-text delimited-comment-section
delimited-comment-section:
>
hashes~opt~ not-greater-than-or-hash
hashes:
#
hashes #
not-greater-than-or-hash:
Any Unicode character except > or #
Beschreibung:
Quellcode kann mithilfe von Kommentaren mit Anmerkungen versehen werden.
Ein single-line-comment beginnt mit dem Zeichen # und endet mit einem new-line-character.
Ein delimited-comment beginnt mit dem Zeichenpaar <# und endet mit dem Zeichenpaar #>.
Es kann als Teil einer Quellzeile, als ganze Quellzeile oder über beliebig viele Quellzeilen hinweg auftreten.
Ein Kommentar wird als Leerraum behandelt.
Für die oben genannten Elemente gilt Folgendes:
- Kommentare werden nicht geschachtelt.
- Die Zeichensequenzen <# und #> haben keine besondere Bedeutung in einem einzeiligen Kommentar.
- Das Zeichen # hat keine besondere Bedeutung in einem begrenzten Kommentar.
Die lexikalische Grammatik impliziert, dass Kommentare nicht innerhalb von Token auftreten können.
(Informationen zum Erstellen von Skriptdateien, die spezielle Kommentare enthalten, die zum Generieren von Dokumentationen aus Skriptdateien verwendet werden, finden Sie unter §A.)
Ein requires-comment gibt die Kriterien an, die erfüllt sein müssen, damit das Skript ausgeführt werden kann, in dem er enthalten ist. Das Hauptkriterium ist die Version von PowerShell, die zum Ausführen des Skripts verwendet wird. Die Mindestversionsanforderung wird wie folgt angegeben:
#Requires -Version N[.n]
Dabei ist N die (erforderliche) Hauptversion und n die (optionale) Unterversion.
Ein requires-comment kann in jeder Skriptdatei, jedoch nicht innerhalb einer Funktion oder eines Cmdlets vorhanden sein. Er muss das erste Element in einer Quellzeile sein. Ein Skript kann mehrere requires-comment-Elemente enthalten.
Eine Zeichenfolge wird nur als Kommentar erkannt, wenn diese Sequenz mit # oder <#beginnt. Als Beispiel wird "hello#there" als einzelnes Token betrachtet, während "hello #there" als das Token "hello" gefolgt von einem einzeiligen Kommentar betrachtet wird. Neben dem folgenden Leerzeichen kann der Kommentarstartsequenz auch ein beliebiges Zeichen vorangestellt werden, das den Ausdruck oder eine Anweisung beendet (z. B. ), }, ], ', " oder ;).
Ein requires-comment kann nicht in einem Snap-In vorhanden sein.
Es gibt vier weitere requires-comment-Formen:
#Requires -Assembly AssemblyId
#Requires -Module ModuleName
#Requires -PSSnapin PSSnapin [ -Version *N* [.n] ]
#Requires -ShellId ShellId
2.2.4 Leerraum
Syntax:
whitespace:
Any character with Unicode class Zs, Zl, or Zp
Horizontal tab character (U+0009)
Vertical tab character (U+000B)
Form feed character (U+000C)
` (The backtick character U+0060) followed by new-line-character
Beschreibung:
Leerraum besteht aus einer beliebigen Sequenz eines oder mehrerer Leerzeichen.
Mit Ausnahme der Tatsache, dass Leerraum als Trennzeichen für Token fungieren kann, wird er ignoriert.
Im Gegensatz zu einigen gängigen Sprachen betrachtet PowerShell Zeilenabschlusszeichen (§2.2.2) nicht als Leerzeichen. Ein Zeilenabschlusszeichen kann jedoch als Leerraum behandelt werden, indem ihm unmittelbar ein Backtick-Zeichen ` (U+0060) vorangestellt wird. Dies ist erforderlich, wenn der Inhalt einer Zeile syntaktisch vollständig ist, aber die folgende Zeile enthält Token, die der vorherigen Zeile zugeordnet werden sollen. Beispiel:
$number = 10 # assigns 10 to $number; nothing is written to the pipeline
+ 20 # writes 20 to the pipeline
- 50 # writes -50 to the pipeline
$number # writes $number's value, 10, to the pipeline
In diesem Beispiel zeigt der Backtick an, dass die Quellzeile fortgesetzt wird. Der folgende Ausdruck entspricht $number = 10 + 20 - 50.
$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20
2.3 Token
Syntax:
token:
keyword
variable
command
command-parameter
command-argument-token
integer-literal
real-literal
string-literal
type-literal
operator-or-punctuator
Beschreibung:
Ein Token ist das kleinste lexikalische Element innerhalb der PowerShell-Sprache.
Token können durch new-lines, Kommentare, Leerraum oder eine beliebige Kombination davon getrennt werden.
2.3.1 Schlüsselwörter
Syntax:
keyword: one of
begin break catch class
continue data define do
dynamicparam else elseif end
exit filter finally for
foreach from function if
in inlinescript parallel param
process return switch throw
trap try until using
var while workflow
Beschreibung:
Ein Schlüsselwort ist eine Abfolge von Zeichen, die eine besondere Bedeutung haben, wenn sie an einer kontextabhängigen Stelle verwendet wird. In den meisten Fällen ist dies das erste Token in einer Anweisung. Es gibt jedoch andere Positionen, wie durch die Grammatik angegeben. (Ein Token, das wie ein Schlüsselwort aussieht, aber nicht in einem Schlüsselwortkontext verwendet wird, ist ein Befehlsname oder ein Befehlsargument.)
Die Schlüsselwörter class, define, from, usingund var sind für die zukünftige Verwendung reserviert.
Anmerkung
Editorhinweis: Die schlüsselwörter class und using wurden in PowerShell 5.0 eingeführt. Weitere Informationen finden Sie unter about_Classes und about_Using.
2.3.2 Variablen
Syntax:
variable:
$$
$?
$^
$ variable-scope~opt~ variable-characters
@ variable-scope~opt~ variable-characters
braced-variable
braced-variable:
${ variable-scope~opt~ braced-variable-characters }
variable-scope:
Global:
Local:
Private:
Script:
Using:
Workflow:
variable-namespace
variable-namespace:
variable-characters :
variable-characters:
variable-character
variable-characters variable-character
variable-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
_ (The underscore character U+005F)
?
braced-variable-characters:
braced-variable-character
braced-variable-characters braced-variable-character
braced-variable-character:
Any Unicode character except
} (The closing curly brace character U+007D)
` (The backtick character U+0060)
escaped-character
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Beschreibung:
Variablen werden ausführlich in (§5) erläutert. Die Variable „$?“ wird in §2.3.2.2 erläutert. Bereiche werden in §3.5 erläutert.
Die Variablen $$ und $^ sind für die Verwendung in einer interaktiven Umgebung reserviert, die sich außerhalb des Umfangs dieser Spezifikation befindet.
Es gibt zwei Möglichkeiten, einen Variablennamen zu schreiben: Einen Variablennamen mit geschweiften Klammern, der mit $ beginnt, gefolgt von einem in geschweifte Klammern gesetzten Satz von einem oder mehreren fast beliebigen Zeichen, und ein gewöhnlicher Variablenname, der ebenfalls mit $ beginnt, gefolgt von einem Satz von einem oder mehreren Zeichen aus einem restriktiveren Satz, als ihn ein Variablenname mit geschweiften Klammern zulässt. Jeder gewöhnliche Variablenname kann mit einem entsprechenden geklammerten Variablennamen ausgedrückt werden.
$totalCost
$Maximum_Count_26
$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)
${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}
Es gibt keine Beschränkung für die Länge eines Variablennamens, alle Zeichen in einem Variablennamen sind signifikant, und die Groß-/Kleinschreibung wird nicht unterschieden.
Es gibt verschiedene Arten von Variablen: benutzerdefinierte (§2.3.2.1), automatisch (§2.3.2.2) und Präferenz (§2.3.2.3). Sie können alle in demselben Umfang koexistieren (§3.5).
Betrachten Sie die folgende Funktionsdefinition und -aufrufe:
function Get-Power ([long]$Base, [int]$Exponent) { ... }
Get-Power 5 3 # $Base is 5, $Exponent is 3
Get-Power -Exponent 3 -Base 5 # " " "
Die Argumente werden nach Position oder Name nacheinander übergeben. Ein Satz von Argumenten kann jedoch als Gruppe mit Erweiterung in einzelne Argumente übergeben werden, die von der Laufzeitumgebung verarbeitet werden. Diese automatische Argumenterweiterung wird als Splatting bezeichnet. Beispiel:
$values = 5,3 # put arguments into an array
Get-Power @values
$hash = @{ Exponent = 3; Base = 5 } # put arguments into a Hashtable
Get-Power @hash
function Get-Power2 { Get-Power @args } # arguments are in an array
Get-Power2 -Exponent 3 -Base 5 # named arguments splatted named in
@args
Get-Power2 5 3 # position arguments splatted positionally in @args
Dies wird erreicht, indem anstelle von @$ als erstes Zeichen der übergebenen Variablen verwendet wird.
Diese Schreibweise kann nur in einem Argument für einen Befehl verwendet werden.
Namen werden in verschiedene Namespaces unterteilt, die jeweils auf einem virtuellen Laufwerk gespeichert sind (§3.1). Variablen werden beispielsweise auf Variable:gespeichert, Umgebungsvariablen werden auf Env:gespeichert, Funktionen werden auf Function:gespeichert, und Aliase werden auf Alias:gespeichert. Auf alle diese Namen kann mithilfe der variable-namespace-Produktion innerhalb des variable-scope als Variablen zugegriffen werden. Beispiel:
function F { "Hello from F" }
$Function:F # invokes function F
Set-Alias A F
$Alias:A # invokes function F via A
$Count = 10
$Variable:Count # accesses variable Count
$Env:PATH # accesses environment variable PATH
Jede Verwendung eines Variablennamens mit einem expliziten Variable:-Namespace entspricht der Verwendung dieses Variablennamens ohne diese Spezifikation. Beispielsweise sind $v und $Variable:v austauschbar.
Zusätzlich zur Definition in der Sprache können Variablen auch durch das Cmdlet New-Variabledefiniert werden.
2.3.2.1 Benutzerdefinierte Variablen
Jeder von der Grammatik zulässige Variablenname, der nicht von automatischen oder Einstellungsvariablen benutzt wird, ist für benutzerdefinierte Variablen verfügbar.
Benutzerdefinierte Variablen werden durch benutzerdefinierte Skripts erstellt und verwaltet.
2.3.2.2 Automatische Variablen
Automatische Variablen speichern Statusinformationen zur PowerShell-Umgebung. Ihre Werte können in einem vom Benutzer geschriebenen Skript gelesen, aber nicht geschrieben werden.
Anmerkung
Die ursprünglich in diesem Dokument gefundene Tabelle wurde entfernt, um die Duplizierung zu reduzieren. Eine vollständige Liste der automatischen Variablen finden Sie unter about_Automatic_Variables.
2.3.2.3 Präferenzvariablen
Einstellungsvariablen speichern Benutzereinstellungen für die Sitzung. Sie werden von der PowerShell-Laufzeitumgebung erstellt und initialisiert. Ihre Werte können gelesen und in einem vom Benutzer geschriebenen Skript geschrieben werden.
Anmerkung
Die ursprünglich in diesem Dokument gefundene Tabelle wurde entfernt, um die Duplizierung zu reduzieren. Eine vollständige Liste der Einstellungsvariablen finden Sie unter about_Preference_Variables.
2.3.3 Befehle
Syntax:
generic-token:
generic-token-parts
generic-token-parts:
generic-token-part
generic-token-parts generic-token-part
generic-token-part:
expandable-string-literal
verbatim-here-string-literal
variable
generic-token-char
generic-token-char:
Any Unicode character except
{ } ( ) ; , | & $
` (The backtick character U+0060)
double-quote-character
single-quote-character
whitespace
new-line-character
escaped-character
generic-token-with-subexpr-start:
generic-token-parts $(
2.3.4 Parameter
Syntax:
command-parameter:
dash first-parameter-char parameter-chars colon~opt~
first-parameter-char:
A Unicode character of classes Lu, Ll, Lt, Lm, or Lo
_ (The underscore character U+005F)
?
parameter-chars:
parameter-char
parameter-chars parameter-char
parameter-char:
Any Unicode character except
{ } ( ) ; , \| & . [
colon
whitespace
new-line-character
colon:
: (The colon character U+003A)
verbatim-command-argument-chars:
verbatim-command-argument-part
verbatim-command-argument-chars verbatim-command-argument-part
verbatim-command-argument-part:
verbatim-command-string
& non-ampersand-character
Any Unicode character except
|
new-line-character
non-ampersand-character:
Any Unicode character except &
verbatim-command-string:
double-quote-character non-double-quote-chars
double-quote-character
non-double-quote-chars:
non-double-quote-char
non-double-quote-chars non-double-quote-char
non-double-quote-char:
Any Unicode character except
double-quote-character
Beschreibung:
Wenn ein Befehl aufgerufen wird, können ihm Informationen über ein oder mehrere Argumente übergeben werden, auf deren Werte innerhalb des Befehls über einen Satz entsprechender Parameter zugegriffen wird. Der Prozess des Zuordnens von Parametern zu Argumenten wird Parameterbindunggenannt.
Es gibt drei Arten von Argumenten:
Switch-Parameter (§8.10.5): Dieser hat die Form command-parameter, wobei first-parameter-char und parameter-chars zusammen den Switch-Namen bilden, der dem Namen eines Parameters (ohne dessen führenden
-) im aufgerufenen Befehl entspricht. Wenn der nachstehende Doppelpunkt weggelassen wird, zeigt das Vorhandensein dieses Arguments, dass der entsprechende Parameter auf$truefestgelegt werden kann. Wenn der nachstehende Doppelpunkt vorhanden ist, muss das unmittelbar darauf folgende Argument einen booleschen Wert angeben, und der entsprechende Parameter wird auf diesen Wert festgelegt. Beispielsweise sind die folgenden Aufrufe gleichwertig:Set-MyProcess -Strict Set-MyProcess -Strict: $trueParameter mit Argument (§8.10.2): Dieser hat die Form command-parameter, wobei first-parameter-char und parameter-chars zusammen den Parameternamen bilden, der dem Namen eines Parameters (ohne dessen führenden „-“) im aufgerufenen Befehl entspricht. Es darf dort keinen nachstehenden Doppelpunkt geben. Das unmittelbar folgende Argument kennzeichnet einen zugeordneten Wert. Bei einem Befehl
Get-Power, der die Parameter$Baseund$Exponenthat, sind die folgenden Aufrufe äquivalent:Get-Power -Base 5 -Exponent 3 Get-Power -Exponent 3 -Base 5Positionsargument (§8.10.2) – Argumente und ihre entsprechenden Parameter in Befehlen haben Positionen, wobei die erste Position die Null ist. Das Argument in Position 0 ist an den Parameter an Position 0 gebunden; das Argument in Position 1 ist an den Parameter an Position 1 gebunden; und so weiter. Bei einem Befehl
Get-Powermit den Parametern$Baseund$Exponentan den Positionen 0 und 1 wird dieser Befehl beispielsweise folgendermaßen aufgerufen:Get-Power 5 3
Einzelheiten zu den speziellen Parametern und --finden Sie unter --%.
Wenn ein Befehl aufgerufen wird, kann ein Parametername abgekürzt werden. Ein beliebiger führender Teil des vollständigen Namens kann verwendet werden, vorausgesetzt, dies ist in Bezug auf die Namen der anderen Parameter, die vom selben Befehl akzeptiert werden, eindeutig.
Informationen zur Parameterbindung finden Sie unter §8.14.
2.3.5 Literale
Syntax:
literal:
integer-literal
real-literal
string-literal
2.3.5.1 Numerische Literale
Es gibt zwei Arten numerischer Literale: ganze Zahl (§2.3.5.1.1) und reelle Zahl (§2.3.5.1.2). Beide können Multiplikatorsuffixe aufweisen (§2.3.5.1.3).
2.3.5.1.1 Ganzzahlenliterale
Syntax:
integer-literal:
decimal-integer-literal
hexadecimal-integer-literal
decimal-integer-literal:
decimal-digits numeric-type-suffix~opt~ numeric-multiplier~opt~
decimal-digits:
decimal-digit
decimal-digit decimal-digits
decimal-digit: one of
0 1 2 3 4 5 6 7 8 9
numeric-type-suffix:
long-type-suffix
decimal-type-suffix
hexadecimal-integer-literal:
0x hexadecimal-digits long-type-suffix~opt~
numeric-multiplier~opt~
hexadecimal-digits:
hexadecimal-digit
hexadecimal-digit decimal-digits
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9 a b c d e f
long-type-suffix:
l
numeric-multiplier: one of
kb mb gb tb pb
Beschreibung:
Der Typ eines ganzzahligen Literals wird durch seinen Wert, das Vorhandensein oder Fehlen des long-type-suffix und das Vorhandensein eines numeric-multiplier bestimmt (§2.3.5.1.3).
Für ein ganzzahliges Literal ohne long-type-suffix
- Kann sein Wert durch Typ int (§4.2.3) dargestellt werden, ist dies der Typ;
- Wenn der Wert andernfalls durch den Typ Long (§4.2.3) dargestellt werden kann, ist dies sein Typ.
- Andernfalls, wenn sein Wert durch Typ Dezimal (§2.3.5.1.2) dargestellt werden kann, ist das sein Typ.
- Andernfalls wird er durch den Typ Double (§2.3.5.1.2) dargestellt.
Für ein ganzzahliges Literal mit long-type-suffix
- Wenn sein Wert durch Typ long (§4.2.3) dargestellt werden kann, ist dies der Typ;
- Andernfalls ist dieses Literal nicht wohlgeformt.
In der Zweierkomplementdarstellung von ganzzahligen Werten gibt es einen negativen Wert mehr als positive Werte. Für den Int-Typ lautet dieser Zusätzliche Wert -2147483648. Für den Long-Typ ist dieser zusätzliche Wert -9223372036854775808. Obwohl das Token 2147483648 normalerweise als Literal vom Typ Long behandelt wird, werden dieser Operator und das Literal als Literal vom Typ Int mit dem kleinsten Wert behandelt, wenn ihm unmittelbar der unäre Operator „-“ vorangestellt ist. Obwohl das Token 9223372036854775808 normalerweise als Literal vom Typ Real behandelt wird, werden dieser Operator und das Literal ebenso als Literal vom Typ Long mit dem kleinsten Wert behandelt, wenn ihm unmittelbar der unäre Operator „-“ vorangestellt ist.
Einige Beispiele für ganzzahlige Literale sind 123 (int), 123L (lang) und 20000000000 (lang).
Es gibt kein ganzzahliges Literal vom Typ Byte.
2.3.5.1.2 Real-Literale
Syntax:
real-literal:
decimal-digits . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
. decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
decimal-digits exponent-part decimal-type-suffix~opt~ numeric-multiplier~opt~
exponent-part:
e sign~opt~ decimal-digits
sign: one of
+
dash
decimal-type-suffix:
d
l
numeric-multiplier: one of
kb mb gb tb pb
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Beschreibung:
Ein Real-Literal kann einen numeric-multiplier (§2.3.5.1.3) enthalten.
Es gibt zwei Arten von Real-Literalen: Double und Dezimal. Diese sind am Fehlen bzw. Vorhandensein von decimal-type-suffix zu erkennen. (Es gibt kein Gleitkomma-Real-Literal.)
Ein Double-Real-Literal hat den Typ Double (§4.2.4.1). Ein Dezimal-Real-Literal hat den Typ Dezimal (§4.2.4.2). Nachstellende Nullen im Bruchteil eines Dezimal-Real-Literals sind von Bedeutung.
Wenn der Wert der decimal-digits von exponent-part in einem Double-Real-Literal kleiner als der unterstützte Mindestwert ist, ist der Wert dieses Double-Real-Literals 0 (null). Wenn der Wert der decimal-digits von exponent-part in einem Dezimal-Real-Literal kleiner als der unterstützte Mindestwert ist, ist dieses Literal nicht wohlgeformt. Wenn der Wert der decimal-digits von exponent-part in einem Double- oder Dezimal-Real-Literal größer als der unterstützte Höchstwert ist, ist dieses Literal nicht wohlgeformt.
Einige Beispiele für doppelte reale Literale sind 1., 1.23, .45e35, 32.e+12 und 123.456E-231.
Einige Beispiele für dezimale reale Literale sind 1d (mit Skalierung 0), 1,20d (mit Skalierung 2), 1,23450e1d (d. h. 12,3450, die Skalierung 4 hat), 1,2345e3d (d. h., 1234,5, das Skalierung 1 hat, 1,2345e-1d (d. h. 0,12345, die Skalierung 5 hat), und 1,2345e-3d (d. h. 0,0012345, die Skalierung 7 hat).
Anmerkung
Da ein Double-Real-Literal keinen Bruch- oder Exponententeil haben muss, werden die Gruppierungsklammern in (123).M verwendet, um sicherzustellen, dass die Eigenschaft oder Methode M für das ganzzahlige Objekt ausgewählt wird, dessen Wert 123 ist. Ohne diese Klammern wäre das Real-Literal nicht wohlgeformt.
Anmerkung
PowerShell bietet zwar keine Literale für Unendlichkeiten und NaNs, aber Double-Real-Äquivalente können aus den statischen schreibgeschützten Eigenschaften PositiveInfinity, NegativeInfinity und NaN der Typen Gleitkomma und Double gewonnen werden (§4.2.4.1).
Die Grammatik erlaubt, dass das, was als Double-Real-Literal beginnt, ein l- oder L-Typsuffix haben kann. Ein solches Token ist tatsächlich ein ganzzahliges Literal, dessen Wert durch den Typ Long dargestellt wird.
Anmerkung
Dieses Feature wurde aus Gründen der Abwärtskompatibilität mit früheren Versionen von PowerShell beibehalten. Programmierer werden jedoch davon abgeraten, Zahlenliterale dieser Form zu verwenden, da sie den tatsächlichen Wert des Literals leicht verdecken können. Beispielsweise hat 1,2L den Wert 1, 1,2345e1L den Wert 12, und 1,2345e-5L hat den Wert 0, von denen keine sofort offensichtlich ist.
2.3.5.1.3 Multiplikatorsuffixe
Syntax:
numeric-multiplier: *one of*
kb mb gb tb pb
Beschreibung:
Der Einfachheit halber können ganzzahlige und Real-Literale einen numeric-multiplier enthalten, der einen Satz von 10 häufig verwendeten Potenzen angibt. numeric-multiplier kann in einer beliebigen Kombination aus Groß- oder Kleinbuchstaben geschrieben werden.
| Multiplikator | Bedeutung | Beispiel |
|---|---|---|
| kb | Kilobyte (1024) | 1 kb ≡ 1024 |
| mb | Megabyte (1024 x 1024) | 1,30 MB ≡ 1363148.80 |
| gb | Gigabyte (1024 x 1024 x 1024) | 0x10Gb ≡ 17179869184 |
| tb | Terabyte (1024 x 1024 x 1024 x 1024) | 1.4e23tb ≡ 1.5393162788864E+35 |
| pb | petabyte (1024 x 1024 x 1024 x 1024 x 1024) | 0x12Lpb-≡ 20266198323167232 |
2.3.5.2 Zeichenfolgenliterale
Syntax:
string-literal:
expandable-string-literal
expandable-here-string-literal
verbatim-string-literal
verbatim-here-string-literal
expandable-string-literal:
double-quote-character expandable-string-characters~opt~ dollars~opt~ double-quote-character
double-quote-character:
" (U+0022)
Left double quotation mark (U+201C)
Right double quotation mark (U+201D)
Double low-9 quotation mark (U+201E)
expandable-string-characters:
expandable-string-part
expandable-string-characters
expandable-string-part
expandable-string-part:
Any Unicode character except
$
double-quote-character
` (The backtick character U+0060)
braced-variable
$ Any Unicode character except
(
{
double-quote-character
` (The backtick character U+0060)*
$ escaped-character
escaped-character
double-quote-character double-quote-character
dollars:
$
dollars $
expandable-here-string-literal:
@ double-quote-character whitespace~opt~ new-line-character
expandable-here-string-characters~opt~ new-line-character double-quote-character @
expandable-here-string-characters:
expandable-here-string-part
expandable-here-string-characters expandable-here-string-part
expandable-here-string-part:
Any Unicode character except
$
new-line-character
braced-variable
$ Any Unicode character except
(
new-line-character
$ new-line-character Any Unicode character except double-quote-char
$ new-line-character double-quote-char Any Unicode character except @
new-line-character Any Unicode character except double-quote-char
new-line-character double-quote-char Any Unicode character except @
expandable-string-with-subexpr-start:
double-quote-character expandable-string-chars~opt~ $(
expandable-string-with-subexpr-end:
double-quote-char
expandable-here-string-with-subexpr-start:
@ double-quote-character whitespace~opt~ new-line-character expandable-here-string-chars~opt~ $(
expandable-here-string-with-subexpr-end:
new-line-character double-quote-character @
verbatim-string-literal:
single-quote-character verbatim-string-characters~opt~ single-quote-char
single-quote-character:
' (U+0027)
Left single quotation mark (U+2018)
Right single quotation mark (U+2019)
Single low-9 quotation mark (U+201A)
Single high-reversed-9 quotation mark (U+201B)
verbatim-string-characters:
verbatim-string-part
verbatim-string-characters verbatim-string-part
verbatim-string-part:
*Any Unicode character except* single-quote-character
single-quote-character single-quote-character
verbatim-here-string-literal:
@ single-quote-character whitespace~opt~ new-line-character
verbatim-here-string-characters~opt~ new-line-character
single-quote-character *@*
verbatim-*here-string-characters:
verbatim-here-string-part
verbatim-here-string-characters verbatim-here-string-part
verbatim-here-string-part:
Any Unicode character except* new-line-character
new-line-character Any Unicode character except single-quote-character
new-line-character single-quote-character Any Unicode character except @
Beschreibung:
Es gibt vier Arten von Zeichenfolgenliteralen:
verbatim-string-literal (einzeilig, einfache Anführungszeichen), eine Sequenz von 0 (null) oder mehr Zeichen, die durch ein single-quote-character-Paar getrennt sind. Beispiele sind „''“ und „'red'“.
expandable-string-literal (einzeilig, doppelte Anführungszeichen), eine Sequenz von 0 (null) oder mehr Zeichen, die durch ein double-quote-character-Paar getrennt sind. Beispiele sind „""“ und „"red"“.
verbatim-here-string-literal (einzeilig, einfache Anführungszeichen), eine Sequenz von null oder mehr Zeichen, getrennt durch die Zeichenpaare @single-quote-character bzw. single-quote-character@, alle in zwei oder mehr Quellzeilen enthalten. Beispiele:
@' '@ @' line 1 '@ @' line 1 line 2 '@expandable-here-string-literal (mehrzeilig, doppelte Anführungszeichen), eine Sequenz von null oder mehr Zeichen, getrennt durch die Zeichenpaare @double-quote-character bzw. double-quote-character@, alle in zwei oder mehr Quellzeilen enthalten. Beispiele:
@" "@ @" line 1 "@ @" line 1 line 2 "@
Bei verbatim-here-string-literal- und expandable-here-string-literal-Elementen dürfen außer Leerraum (der ignoriert wird) keine Zeichen in derselben Quellzeile auf das öffnende Trennzeichenpaar folgen, und keine Zeichen dürfen in derselben Quellzeile wie dem schließenden Trennzeichenpaar voranstehen.
Der Textkörper eines verbatim-here-string-literal oder expandable-here-string-literal beginnt am Anfang der ersten Quellzeile nach dem öffnenden Trennzeichen und endet am Ende der letzten Quellzeile vor dem schließenden Trennzeichen. Der Körper kann leer sein. Das Zeilenabschlusszeichen in der letzten Quellzeile vor dem schließenden Trennzeichen ist nicht Teil des Textkörpers dieses Literals.
Ein Literal eines dieser Arten ist vom Typ Zeichenfolge (§4.3.1).
Das zum Begrenzen von verbatim-string-literal oder expandable-string-literal verwendete Zeichen kann in ein solches Zeichenfolgenliteral aufgenommen werden, indem dieses Zeichen zweimal hintereinander geschrieben wird. Beispiel: 'What''s the time?' und "I said, ""Hello"".". Ein single-quote-character hat jedoch keine besondere Bedeutung innerhalb eines expandable-string-literal, und ein double-quote-character hat keine besondere Bedeutung in einem verbatim-string-literal.
Ein expandable-string-literal und ein expandable-here-string-literal können escaped-character-Elemente (§2.3.7) enthalten. Wenn beispielsweise das folgende Zeichenfolgenliteral in die Pipeline geschrieben wird, sieht das Ergebnis wie folgt aus:
"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!
Wenn ein expandable-string-literal oder expandable-here-string-literal den Namen einer Variablen enthält, wird er durch die Zeichenfolgendarstellung des Werts dieser Variablen ersetzt (§6.7), solange diesem Namen nicht unmittelbar ein Escapezeichen vorangestellt ist. Dies wird als Variablenersetzung bezeichnet.
Anmerkung
Wenn der Variablenname Teil eines größeren Ausdrucks ist, wird nur der Variablenname ersetzt. Wenn $a beispielsweise ein Array ist, das die Elemente 100 und 200 enthält, führt ">$a.Length<" zu >100 200.Length<, während ">$($a.Length)<" zu >2<führt. Siehe Informationen zur Unterausdruckserweiterung weiter unten.
Beispiel: Der Quellcode
$count = 10
"The value of `$count is $count"
z. B. im expandable-string-literal.
The value of $count is 10.
Beachten Sie Folgendes:
$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally
Das Ergebnis ist
$a[0] is red blue[0], $a[0] is red
expandable-string-literal- und expandable-here-string-literal-Elemente unterstützen auch eine Art von Ersetzung, die als Unterausdruckserweiterung bezeichnet wird, indem Text der Form $( ... ) als Unterausdruck (§7.1.6) behandelt wird. Dieser Text wird durch die Zeichenfolgendarstellung des Werts dieses Ausdrucks ersetzt (§6.8). Leerraum, der zum Trennen von Token innerhalb der statement-list von sub-expression verwendet wird, wird im Rahmen der Konstruktion der Ergebniszeichenfolge ignoriert.
Die Beispiele
$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"
resultieren in den folgenden expandable-string-literal-Elementen:
10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)
Die folgende Quelle
$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"
resultiert im folgenden expandable-string-literal:
$i, $j, and $k have the values 5 10 15
Diese vier Zeilen könnten prägnant wie folgt geschrieben worden sein:
"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"
Im folgenden Beispiel
"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"
lautet das resultierende expandable-string-literal wie folgt:
First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
Wie gezeigt, kann ein Unterausdruck Zeichenfolgenliterale enthalten, die sowohl eine Variablenersetzung als auch eine Unterausdruckserweiterung aufweisen. Beachten Sie auch, dass die Trennzeichen des inneren expandable-string-literal nicht mit Escapezeichen versehen werden müssen. Die Tatsache, dass sie sich innerhalb eines Unterausdrucks befinden, bedeutet, dass sie keine Abschlusszeichen für das äußere expandable-string-literal sein können.
Ein expandable-string-literal oder expandable-here-string-literal, das eine Variablenersetzung oder Unterausdruckserweiterung enthält, wird bei jeder Verwendung dieses Literals ausgewertet, z. B.
$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"
was in folgenden expandable-string-literal-Elementen resultiert:
$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<
Der Inhalt eines verbatim-here-string-literal wird ohne Abstriche übernommen, einschließlich aller führenden oder nachstehenden Leerzeichen im Text. Daher müssen eingebettete single-quote-character-Elemente nicht verdoppelt werden, und es gibt keine Ersetzung oder Erweiterung. Beispiel:
$lit = @'
That's it!
2 * 3 = $(2*3)
'@
was im Literal resultiert.
That's it!
2 * 3 = $(2*3)
Der Inhalt eines expandable-here-string-literal unterliegt einer Ersetzung und Erweiterung, aber alle führenden oder nachstehenden Leerzeichen innerhalb des Textkörpers, aber außerhalb von Unterausdrücken werden ohne Abstriche verwendet, und eingebettete double-quote-character-Elemente müssen nicht verdoppelt werden. Beispiel:
$lit = @"
That's it!
2 * 3 = $(2*3)
"@
was in folgendem Literal resultiert, wenn es erweitert wird:
That's it!
2 * 3 = 6
Sowohl für verbatim-here-string-literal- als auch expandable-here-string-literal-Elemente wird jedes Zeilenabschlusszeichen innerhalb des Textkörpers im resultierenden Literal auf implementierungsdefinierte Weise dargestellt. Beispiel:
$lit = @"
abc
xyz
"@
verfügt die zweite Zeile des Textkörpers über zwei führende Leerzeichen, und die erste und zweite Zeile des Textkörpers verfügen über Zeilenabschlusszeichen. Das Abschlusszeichen für die zweite Zeile des Textkörpers ist jedoch nicht Teil dieses Textkörpers. Das resultierende Literal entspricht: "abc<implementation-defined character sequence>xyz".
Anmerkung
Um die Lesbarkeit der Quelle zu verbessern, können lange Zeichenfolgenliterale über mehrere Quellzeilen verteilt werden, ohne dass Zeilenabschlusszeichen eingefügt werden. Dazu wird jeder Teil als separates Literal geschrieben, und die Teile werden mit dem „+“-Operator verkettet (§7.7.2). Dieser Operator ermöglicht seinen Operanden, eine der vier Arten von Zeichenfolgenliteralen zu bestimmen.
Anmerkung
Obwohl es kein Zeichenliteral an sich gibt, kann der gleiche Effekt erzielt werden, indem auf das erste Zeichen in einer Zeichenfolge mit 1 Zeichen wie folgt zugegriffen wird: [char]"A" oder "A"[0].
Sowohl für verbatim-here-string-literal- als auch expandable-here-string-literal-Elemente wird jedes Zeilenabschlusszeichen im Text genau so dargestellt, wie es bereitgestellt wurde.
2.3.5.3 NULL-Literal
Siehe die automatische Variable $null (§2.3.2.2).
2.3.5.4 Boolesche Literale
Siehe die automatischen Variablen $false und $true (§2.3.2.2).
2.3.5.5 Arrayliterale
PowerShell ermöglicht das Schreiben von Ausdrücken des Arraytyps (§9) mithilfe von unärem Kommaoperator (§7.2.1), array-expression (§7.1.7), binärem Kommaoperator (§7.3) und Bereichsoperator (§7.4).
2.3.5.6 Hashliterale
PowerShell ermöglicht das Schreiben von Ausdrücken des Typs Hashtable (§10) mithilfe eines hash-literal-expression (§7.1.9).
2.3.5.7 Typnamen
Syntax:
type-name:
type-identifier
type-name . type-identifier
type-identifier:
type-characters
type-characters:
type-character
type-characters type-character
type-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
_ (The underscore character U+005F)
array-type-name:
type-name [
generic-type-name:
type-name [
2.3.6 Operatoren und Interpunktionszeichen
Syntax:
operator-or-punctuator: one of
{ } [ ] ( ) @( @{ $( ;
&& || & | , ++ .. :: .
! * / % + - --
-and -band -bnot -bor
-bxor -not -or -xor
assignment-operator
merging-redirection-operator
file-redirection-operator
comparison-operator
format-operator
assignment-operator: one of
= -= += *= /= %=
file-redirection-operator: one of
> >> 2> 2>> 3> 3>> 4> 4>>
5> 5>> 6> 6>> *> *>> <
merging-redirection-operator: one of
*>&1 2>&1 3>&1 4>&1 5>&1 6>&1
*>&2 1>&2 3>&2 4>&2 5>&2 6>&2
comparison-operator: *one of
-as -ccontains -ceq
-cge -cgt -cle
-clike -clt -cmatch
-cne -cnotcontains -cnotlike
-cnotmatch -contains -creplace
-csplit -eq -ge
-gt -icontains -ieq
-ige -igt -ile
-ilike -ilt -imatch
-in -ine -inotcontains
-inotlike -inotmatch -ireplace
-is -isnot -isplit
-join -le -like
-lt -match -ne
-notcontains -notin -notlike
-notmatch -replace -shl*
-shr -split
format-operator:
-f
Beschreibung:
&& und || sind für die zukünftige Nutzung reserviert.
Anmerkung
Editor-Hinweis: Die Pipelinekettenoperatoren && und || wurden in PowerShell 7 eingeführt. Siehe about_Pipeline_Chain_Operators.
Der Name nach dash in einem Operator ist nur in einem Operatorkontext für diesen Zweck reserviert.
Ein Operator, der mit dash beginnt, darf keinen Leerraum zwischen diesem dash und dem darauf folgenden Token aufweisen.
2.3.7 Escapezeichen
Syntax:
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Beschreibung:
Als Escapezeichen wird einem Zeichen eine besondere Interpretation zugeordnet, indem ihm ein Backtick-Präfixzeichen (U+0060) zugewiesen wird. Die folgende Tabelle zeigt die Bedeutung der einzelnen Escapezeichen:
| Escapezeichen | Bedeutung |
|---|---|
`a |
Warnung (U+0007) |
`b |
Rücktaste (U+0008) |
`f |
Seitenvorschub (U+000C) |
`n |
Zeilenvorschub (U+000A) |
`r |
Wagenrücklauf (U+000D) |
`t |
Horizontaler Tabstopp (U+0009) |
`v |
Vertikaler Tabstopp (U+0009) |
`' |
Einfaches Anführungszeichen (U+0027) |
`" |
Doppeltes Anführungszeichen (U+0022) |
`` |
Backtick (U+0060) |
`0 |
NULL (U+0000) |
`x |
Wenn x keines der oben gezeigten Zeichen ist, wird das Backtick-Zeichen ignoriert und x wörtlich genommen. |
Die Auswirkung des endgültigen Eintrags in der obigen Tabelle ist, dass Leerzeichen, die andernfalls Token trennen würden, stattdessen zu einem Teils eines Tokens gemacht werden können. Beispielsweise kann ein Dateiname, der ein Leerzeichen enthält, als Test` Data.txt (sowie 'Test Data.txt' oder "Test Data.txt") geschrieben werden.