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 im Microsoft Download Center als Microsoft Word-Dokument verfügbar unter: https://www.microsoft.com/download/details.aspx?id=36389. Dieses Word-Dokument wurde für die Präsentation hier auf Microsoft Learn angepasst. 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.
Eine Variable stellt einen Speicherort für einen Wert dar, und dieser Wert weist einen Typ auf. Traditionelle prozedurale Programmiersprachen sind statisch typisiert; das heißt, der Laufzeittyp einer Variablen ist der, mit dem sie zur Kompilierungszeit deklariert wurde. Objektorientierte Sprachen fügen die Idee der Vererbung hinzu, wodurch der Laufzeittyp einer Variablen das sein kann, mit dem sie zur Kompilierungszeit deklariert wurde, oder einen Typ, der von diesem Typ abgeleitet wurde. Da es sich um eine dynamisch typisierte Sprache handelt, weisen PowerShell-Variablen an sich keine Typen auf. Tatsächlich werden Variablen nicht definiert; sie werden einfach erstellt, wenn ihnen erstmals ein Wert zugewiesen wird. Eine Variable kann zwar auf einen Wert eines bestimmten Typs eingeschränkt werden (§ 5.3), die Typinformationen in einer Zuweisung können jedoch nicht immer statisch überprüft werden.
Zu unterschiedlichen Zeiten kann eine Variable werten unterschiedlicher Typen zugeordnet werden, entweder durch Zuordnung (§7.11) oder die Verwendung der ++ und ‑‑ Operatoren (§7.1.5, §7.2.6). Wenn der einer Variablen zugeordnete Wert geändert wird, kann sich der Typ dieses Werts ändern. Beispiel:
$i = "abc" # $i holds a value of type string
$i = 2147483647 # $i holds a value of type int
++$i # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
Jede Verwendung einer Variablen, die nicht erstellt wurde, führt zum Wert $null. Um festzustellen, ob eine Variable definiert wurde, verwenden Sie das Cmdlet Test-Path.
5.1 Beschreibbarer Speicherort
Ein beschreibbarer Speicherort ist ein Ausdruck zur Angabe einer Ressource, auf die ein Befehl sowohl Lese- als auch Schreibzugriff hat. Dabei kann es sich um eine Variable (§ 5), ein Arrayelement (§ 9), einen zugeordneten Wert in einer Hashtabelle, auf den über einen Index (§ 10) zugegriffen werden kann, eine Eigenschaft (§ 7.1.2) oder einen durch einen Anbieter verwalteten Speicher (§ 3.1) handeln.
5.2 Variablenkategorien
PowerShell definiert die folgenden Variablenkategorien: statische Variablen, Instanzvariablen, Arrayelemente, Hashtable-Schlüssel-Wert-Paare, Parameter, normale Variablen und Variablen auf Anbieterlaufwerken. Die folgenden Unterabschnitte beschreiben jede dieser Kategorien.
Im folgenden Beispiel
function F ($p1, $p2) {
$radius = 2.45
$circumference = 2 * ([Math]::PI) * $radius
$date = Get-Date -Date "2010-2-1 10:12:14 pm"
$month = $date.Month
$values = 10, 55, 93, 102
$value = $values[2]
$h1 = @{ FirstName = "James"; LastName = "Anderson" }
$h1.FirstName = "Smith"
$Alias:A = "Help"
$Env:MyPath = "E:\Temp"
${E:output.txt} = 123
$Function:F = { "Hello there" }
$Variable:v = 10
}
-
[Math::PI]ist eine statische Variable -
$date.Monthist eine Instanzvariable -
$values[2]ist ein Arrayelement -
$h1.FirstNameist einHashtableSchlüssel, dessen entsprechender Wert $h1['FirstName'] ist. -
$p1und$p2sind Parameter -
$radius,$circumference,$date,$month,$values,$valueund$h1sind gewöhnliche Variablen -
$Alias:A,$Env:MyPath,${E:output.txt}und$Function:Fstellen Variablen auf den entsprechenden Anbieterlaufwerken dar. -
$Variable:vstellt eine gewöhnliche Variable dar, die mit dem vollqualifizierten Anbieterlaufwerk angegeben wird.
5.2.1 Statische Variablen
Ein Datenelement eines Objekts, das zum Typ des Objekts gehört, und nicht zu dieser bestimmten Instanz des Typs, wird als statische Variablebezeichnet. Einige Beispiele finden Sie unter §4.2.3, §4.2.4.1und §4.3.8.
PowerShell bietet keine Möglichkeit, neue Typen zu erstellen, die statische Variablen enthalten; Objekte solcher Typen können jedoch von der Hostumgebung bereitgestellt werden.
Speicher zum Erstellen und Löschen von Objekten, die statische Variablen enthalten, wird von der Hostumgebung und dem Garbage Collection-System verwaltet.
Informationen zum Zugriff auf eine statische Variable finden Sie unter §7.1.2.
Ein statisches Datenelement kann ein Feld oder eine Eigenschaft sein.
5.2.2 Instanzvariablen
Eine Instanzvariable ist der Datenmember eines Objekts, der zu der spezifischen Instanz des Objekttyps und nicht zum Typ selbst gehört. Einige Beispiele finden Sie unter §4.3.1, §4.3.2und §4.3.3.
Eine PowerShell-Hostumgebung bietet möglicherweise eine Möglichkeit, neue Typen zu erstellen, die Instanzvariablen enthalten, oder neue Instanzvariablen zu vorhandenen Typen hinzufügen.
Speicher zum Erstellen und Löschen von Objekten, die statische Variablen enthalten, wird von der Hostumgebung und dem Garbage Collection-System verwaltet.
Informationen zum Zugriff auf eine Instanzvariable finden Sie unter §7.1.2.
Ein Instanzdatenmember kann ein Feld oder eine Eigenschaft sein.
5.2.3 Arrayelemente
Ein Array kann über einen unären Kommaoperator (§ 7.2.1), einen sub-Ausdruck (§ 7.1.6), einen array-Ausdruck (§ 7.1.7), einen binären Kommaoperator (§ 7.3), einen Bereichsoperator (§ 7.4) oder das Cmdlet New-Object erstellt werden.
Der Arbeitsspeicher zum Erstellen und Löschen von Arrays wird von der Hostumgebung und der automatischen Speicherbereinigung verwaltet.
Ausführliche Informationen zu Arrays und Arrayelementen finden Sie unter § 9.
5.2.4 Schlüssel-Wert-Paare in Hashtabellen
Eine Hashtabelle wird über ein Hashliteral (§ 2.3.5.6) oder das Cmdlet New-Object erstellt. Ein neues Schlüssel-Wert-Paar kann über den [] Operator (§7.1.4.3) hinzugefügt werden.
Der Arbeitsspeicher zum Erstellen und Löschen von Hashtabellen wird von der Hostumgebung und der automatischen Speicherbereinigung verwaltet.
Ausführliche Informationen zu Hashtabellen finden Sie unter § 10.
5.2.5 Parameter
Ein Parameter wird erstellt, wenn sein übergeordneter Befehl aufgerufen wird, und er wird mit dem Wert des Arguments initialisiert, das im Aufruf oder in der Hostumgebung bereitgestellt wird. Ein Parameter ist nicht mehr vorhanden, wenn sein übergeordneter Befehl beendet wird.
Parameter werden in §8.10erläutert.
5.2.6 Gewöhnliche Variablen
Eine gewöhnliche Variable wird durch einen assignment-Ausdruck (§ 7.11) oder eine foreach-Anweisung (§ 8.4.4) definiert. Einige gewöhnliche Variablen werden von der Hostumgebung vordefiniert, während andere vorübergehend sind und zur Laufzeit nach Bedarf kommen und gehen.
Die Lebensdauer einer gewöhnlichen Variablen ist der Zeitraum der Programmausführung, in dem der Speicher dafür garantiert reserviert ist. Diese Lebensdauer beginnt mit dem Einstieg in den Bereich, dem sie zugeordnet ist, und endet nicht früher als das Ende der Ausführung dieses Bereichs. Wenn der übergeordnete Bereich rekursiv oder iterativ eingegeben wird, wird jedes Mal eine neue Instanz der lokalen Variablen erstellt.
Der durch eine gewöhnliche Variable bezeichnete Speicher wird unabhängig von der Lebensdauer dieser Variablen zurückgefordert.
Eine gewöhnliche Variable kann explizit mit dem Namespacepräfix Variable: (§ 5.2.7) benannt werden.
5.2.7 Variablen auf Anbieterlaufwerken
Eine Einführung in Anbieter und Laufwerke finden Sie unter § 3.1. Dort haben Sie auch erfahren, dass jeder Anbieter eigene Namespacelaufwerke bereitstellen kann. Der Zugriff auf Ressourcen in diesen Laufwerken erfolgt, als ob sie gewöhnliche Variablen wären (§5.2.6). Eine gewöhnliche Variable wird auf dem Anbieterlaufwerk des Dateisystems „Variable:“ (§ 3.1.5) gespeichert und kann über ihren normalen Namen oder den vollqualifizierten Namespacenamen aufgerufen werden.
Einige Namespacevariablentypen sind implizit eingeschränkt (§5.3).
5.3 Eingeschränkte Variablen
Standardmäßig kann eine Variable einen Wert eines beliebigen Typs festlegen. Eine Variable kann jedoch so eingeschränkt werden, dass sie nur Werte eines bestimmten Typs angibt. Hierfür muss dieser Typ als Typliteral vor dessen Namen in einer Zuweisung oder einem Parameter angegeben werden. Beispiel:
[int]$i = 10 # constrains $i to designating ints only
$i = "Hello" # error, no conversion to int
$i = "0x10" # ok, conversion to int
$i = $true # ok, conversion to int
function F ([int]$p1, [switch]$p2, [regex]$p3) { ... }
Jede Variable, die dem Namespace Env:, Alias:oder dem Dateisystemnamespace gehört (§2.3.2, §3.1) wird implizit auf den Typ stringbeschränkt. Jede Variable, die dem Namespace Function gehört: (§2.3.2, §3.1) wird implizit auf den Typ scriptblockbeschränkt.