Informationen zu Arrays

Kurzbeschreibung

Beschreibt Arrays, bei denen es sich um Datenstrukturen handelt, die zum Speichern von Sammlungen von Elementen konzipiert sind.

Lange Beschreibung

Ein Array ist eine Datenstruktur, die zum Speichern einer Auflistung von Elementen konzipiert ist. Bei den Elementen kann es sich um denselben Typ oder um unterschiedliche Typen handeln.

Ab Windows PowerShell 3.0 verfügt eine Auflistung von null oder einem Objekt über einige Eigenschaften von Arrays.

Erstellen und Initialisieren eines Arrays

Um ein Array zu erstellen und zu initialisieren, weisen Sie einer Variablen mehrere Werte zu. Die im Array gespeicherten Werte werden durch ein Komma getrennt und durch den Zuweisungsoperator (=) vom Variablennamen getrennt.

Geben Sie z. B. Folgendes ein, um ein Array mit dem Namen $A zu erstellen, das die sieben numerischen (int) Werte 22, 5, 10, 8, 12, 9 und 80 enthält:

$A = 22,5,10,8,12,9,80

Sie können ein Array auch mit dem Bereichsoperator (..) erstellen und initialisieren. Geben Sie z. B. Folgendes ein, um ein Array mit dem Namen "$B" zu erstellen und zu initialisieren, das die Werte 5 bis 8 enthält:

$B = 5..8

Daher enthält $B vier Werte: 5, 6, 7 und 8.

Wenn kein Datentyp angegeben ist, erstellt PowerShell jedes Array als Objektarray (Typ: System.Object[]). Um den Datentyp eines Arrays zu bestimmen, verwenden Sie die GetType()-Methode. Geben Sie z. B. Folgendes ein, um den Datentyp des $a Arrays zu bestimmen:

$a.GetType()

Um ein stark typisiertes Array zu erstellen, d. h. ein Array, das nur Werte eines bestimmten Typs enthalten kann, wandeln Sie die Variable in einen Arraytyp um, z. B. string[], long[] oder int32[]. Um ein Array umzuwandeln, stellen Sie dem Variablennamen einen Array-Typ voran, der in eckige Klammern eingeschlossen ist. Geben Sie z. B. Folgendes ein, um ein ganzzahliges 32-Bit-Array mit dem Namen $ia zu erstellen, das vier ganze Zahlen (1500, 2230, 3350 und 4000) enthält:

[int32[]]$ia = 1500,2230,3350,4000

Daher kann das $ia Array nur ganze Zahlen enthalten.

Sie können Arrays erstellen, die in einen beliebigen unterstützten Typ in Microsoft .NET Framework umgewandelt werden. Die Objekte, die Get-Process abruft, um Prozesse darzustellen, weisen z. B. den Typ System.Diagnostics.Process auf. Um ein stark typisiertes Array von Prozessobjekten zu erstellen, geben Sie den folgenden Befehl ein:

[Diagnostics.Process[]]$zz = Get-Process

Der Operator für den Unterausdruck des Arrays

Mit dem Operator für den Unterausdruck array wird ein Array erstellt, auch wenn es null oder ein Objekt enthält.

Die Syntax des Array-Operators lautet wie folgt:

@( ... )

Sie können den Array-Operator verwenden, um ein Array mit null oder einem Objekt zu erstellen. Beispiel:

PS> $a = @("Hello World")
PS> $a.Count
1
PS> $b = @()
PS> $b.Count
0

Der Array-Operator ist besonders nützlich in Skripten, wenn Sie Objekte abrufen, aber nicht wissen, wie viele Objekte Sie erhalten werden. Beispiel:

$p = @(Get-Process Notepad)

Weitere Informationen zum Operator für den Unterausdruck eines Arrays finden Sie unter about_Operators.

Zugreifen auf und Verwenden von Array-Elementen

Lesen eines Arrays

Sie können auf ein Array verweisen, indem Sie seinen Variablennamen verwenden. Um alle Elemente im Array anzuzeigen, geben Sie den Namen des Arrays ein. Angenommen $a , es handelt sich um ein Array, das die ganzen Zahlen 0, 1, 2 bis 9 enthält. Geben Sie Folgendes ein:

$a
0
1
2
3
4
5
6
7
8
9

Sie können auf die Elemente in einem Array verweisen, indem Sie einen Index verwenden, der an Position 0 beginnt. Schließen Sie die Indexnummer in eckige Klammern ein. Um beispielsweise das erste Element im $a Array anzuzeigen, geben Sie Folgendes ein:

$a[0]
0

Um das dritte Element im $a Array anzuzeigen, geben Sie Folgendes ein:

$a[2]
2

Sie können einen Teil des Arrays abrufen, indem Sie einen Bereichsoperator für den Index verwenden. Um z. B. das zweite bis fünfte Element des Arrays abzurufen, geben Sie Folgendes ein:

$a[1..4]
1
2
3
4

Die negativen Zahlen zählen vom Ende des Arrays. "-1" bezieht sich z. B. auf das letzte Element des Arrays. Um die letzten drei Elemente des Arrays anzuzeigen, geben Sie in aufsteigender Reihenfolge Folgendes ein:

$a = 0 .. 9
$a[-3..-1]
7
8
9

Wenn Sie negative Indizes in absteigender Reihenfolge eingeben, ändert sich die Ausgabe.

$a = 0 .. 9
$a[-1..-3]
9
8
7

Seien Sie jedoch vorsichtig, wenn Sie diese Notation verwenden. Die Notation wechselt von der Endgrenze bis zum Anfang des Arrays.

$a = 0 .. 9
$a[2..-2]
2
1
0
9
8

Außerdem besteht ein häufiger Fehler darin, anzunehmen, dass $a[0..-2] auf alle Elemente des Arrays verweist, mit Ausnahme der letzten. Es bezieht sich auf die ersten, letzten und vorletzten Elemente im Array.

Sie können den Plus-Operator (+) verwenden, um einen Bereich mit einer Liste von Elementen in einem Array zu kombinieren. Geben Sie z. B. Folgendes ein, um die Elemente an den Indexpositionen 0, 2 und 4 bis 6 anzuzeigen:

$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6

Um mehrere Bereiche und einzelne Elemente aufzulisten, können Sie auch den Plus-Operator verwenden. So listen Sie z. B. die Elemente null bis zwei, vier bis sechs und das Element an der achten Position auf:

$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8

Iterationen über Array-Elemente

Sie können auch Schleifenkonstrukte verwenden, z. B. ForEach-, For- und While-Schleifen, um auf die Elemente in einem Array zu verweisen. Geben Sie z. B. Folgendes ein, um eine ForEach-Schleife zum Anzeigen der Elemente im $a Array zu verwenden:

$a = 0..9
foreach ($element in $a) {
  $element
}
0
1
2
3
4
5
6
7
8
9

Die Foreach-Schleife durchläuft das Array und gibt jeden Wert im Array zurück, bis das Ende des Arrays erreicht ist.

Die For-Schleife ist nützlich, wenn Sie Indikatoren inkrementieren, während Sie die Elemente in einem Array untersuchen. Wenn Sie z. B. eine For-Schleife verwenden möchten, um jeden anderen Wert in einem Array zurückzugeben, geben Sie Folgendes ein:

$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
  $a[$i]
}
0
2
4
6
8

Sie können eine While-Schleife verwenden, um die Elemente in einem Array anzuzeigen, bis eine definierte Bedingung nicht mehr wahr ist. Geben Sie z. B. Folgendes ein, um die Elemente im $a Array anzuzeigen, während der Arrayindex kleiner als 4 ist:

$a = 0..9
$i=0
while($i -lt 4) {
  $a[$i];
  $i++
}
0
1
2
3

Eigenschaften von Arrays

Count oder Length oder LongLength

Um zu bestimmen, wie viele Elemente sich in einem Array befinden, verwenden Sie die Length Eigenschaft oder ihren Count Alias. Longlength ist nützlich, wenn das Array mehr als 2.147.483.647 Elemente enthält.

$a = 0..9
$a.Count
$a.Length
10
10

Rang

Gibt die Anzahl der Dimensionen im Array zurück. Die meisten Arrays in PowerShell verfügen nur über eine Dimension. Selbst wenn du denkst, dass du ein multidimensionales Array baust; wie im folgenden Beispiel:

$a = @(
  @(0,1),
  @("b", "c"),
  @(Get-Process)
)

[int]$r = $a.Rank
"`$a rank: $r"
$a rank: 1

Das Erstellen eines wirklich mehrdimensionalen Arrays in PowerShell erfordert die Unterstützung von .Net Framework. Wie im folgenden Beispiel:

[int[,]]$rank2 = [int[,]]::new(5,5)
$rank2.rank
2

Methoden von Arrays

Klar

Legt alle Elementwerte auf den Standardwert des Elementtyps des Arrays fest. Die Clear()-Methode setzt die Größe des Arrays nicht zurück.

Im folgenden Beispiel $a ist ein Array von Objekten zu sehen.

$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True

In diesem Beispiel wird explizit so typisiert, $intA dass es ganze Zahlen enthält.

[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0

ForEach- und Where-Methoden

Ab Windows PowerShell 4.0 ForEachWhere können Methoden mithilfe der . Notation aus einer beliebigen Auflistung ausgeführt werden.

Abrufen der Member eines Arrays

Verwenden Sie zum Abrufen der Eigenschaften und Methoden eines Arrays, z. B. der Length-Eigenschaft und der SetValue-Methode, den InputObject-Parameter des Cmdlets Get-Member.

Wenn Sie ein Array über die Pipeline an Get-Membersenden, sendet PowerShell die Elemente nacheinander und Get-Member gibt den Typ jedes Elements im Array zurück (Duplikate werden ignoriert).

Wenn Sie den - InputObject-Parameter verwenden, Get-Member werden die Member des Arrays zurückgegeben.

Mit dem folgenden Befehl werden z. B. die Member der $a Arrayvariablen abgerufen.

Get-Member -InputObject $a

Sie können die Member eines Arrays auch abrufen, indem Sie ein Komma (,) vor dem Wert eingeben, der an das Cmdlet Get-Member übergeben wird. Das Komma macht das Array zum zweiten Element in einem Array von Arrays. Windows PowerShell überträgt die Arrays nacheinander über die Pipeline und gibt Get-Member die Member des Arrays zurück. Wie die nächsten beiden Beispiele.

,$a | Get-Member

,(1,2,3) | Get-Member

Bearbeiten eines Arrays

Sie können die Elemente in einem Array ändern, ein Element zu einem Array hinzufügen und die Werte aus zwei Arrays in einem dritten Array kombinieren.

Um den Wert eines bestimmten Elements in einem Array zu ändern, geben Sie den Arraynamen und den Index des Elements an, das Sie ändern möchten, und verwenden Sie dann den Zuweisungsoperator (=), um einen neuen Wert für das Element anzugeben. Geben Sie z. B. Folgendes ein, um den Wert des zweiten Elements im $a Array (Indexposition 1) in 10 zu ändern:

$a[1] = 10

Sie können auch die SetValue-Methode eines Arrays verwenden, um einen Wert zu ändern. Im folgenden Beispiel wird der zweite Wert (Indexposition 1) des $a Arrays in 500 geändert:

$a.SetValue(500,1)

Sie können den +=-Operator verwenden, um einem Array ein Element hinzuzufügen. Im folgenden Beispiel wird gezeigt, wie dem $a Array ein Element hinzugefügt wird.

$a = @(0..4)
$a += 5

Hinweis

Wenn Sie den += Operator verwenden, erstellt PowerShell ein neues Array mit den Werten des ursprünglichen Arrays und dem hinzugefügten Wert. Dies kann zu Leistungsproblemen führen, wenn der Vorgang mehrmals wiederholt wird oder das Array zu groß ist.

Es ist nicht einfach, Elemente aus einem Array zu löschen, aber Sie können ein neues Array erstellen, das nur ausgewählte Elemente eines vorhandenen Arrays enthält. Geben Sie z. B. Folgendes ein, um das $t Array mit allen Elementen im Array mit Ausnahme des Werts an $a der Indexposition 2 zu erstellen:

$t = $a[0,1 + 3..($a.length - 1)]

Um zwei Arrays zu einem einzigen Array zu kombinieren, verwenden Sie den Plus-Operator (+). Im folgenden Beispiel werden zwei Arrays erstellt, kombiniert und dann das resultierende kombinierte Array angezeigt.

$x = 1,3
$y = 5,9
$z = $x + $y

Infolgedessen enthält das $z Array 1, 3, 5 und 9.

Um ein Array zu löschen, weisen Sie dem Array den Wert $null zu. Der folgende Befehl löscht das Array in der $a Variablen.

$a = $null

Sie können auch das Remove-Item Cmdlet verwenden, aber das Zuweisen des Werts ist $null schneller, insbesondere bei großen Arrays.

Arrays von Null oder Eins

Ab Windows PowerShell 3.0 verfügt eine Auflistung von null oder einem Objekt über die Count- und Length-Eigenschaft. Sie können auch in ein Array eines Objekts indizieren. Mit dieser Funktion können Sie Skripterstellungsfehler vermeiden, die auftreten, wenn ein Befehl, der eine Sammlung erwartet, weniger als zwei Elemente erhält.

In den folgenden Beispielen wird diese Funktion veranschaulicht.

Null Objekte

$a = $null
$a.Count
$a.Length
0
0

Ein Objekt

$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4

Siehe auch