Benutzer-Werkzeuge

Webseiten-Werkzeuge


powershell:allgemein:array

Array / Collection

Ein Array ist eigentlich eine Sammlung von Werten in einem Datenfeld, am besten vergleichbar mit einer Tabelle, die zeilenweise Werte enthält. Enthält eine Zeile nur einen Wert (eine Spalte), dann ist es ein eindimensionales Array, sind mehrere Werte enthalten ist es ein mehrdimensionales Array.
Da die PowerShell von der Grundidee her ein Werkzeug zur Bearbeitung von Objekten ist (Benutzerkonten, Maschinenkonten, Konfigurationen), findet man in Arrays häufig Objekte mit mehreren Attributen. Deshalb wird in der PowerShell nicht von Arrays, sondern von Collections gesprochen.

Einfache Werte in Arrays

Ein leeres Array erzeugen, dem später dynamisch Inhalt hinzufügt wird:

$data=@()

Ohne die Deklaration mit dem @ wäre es eine Variable, die nur einen Wert aufnehmen könnte. Beim Hinzufügen eines neuen Wertes würden nicht zwei Elemente enthalten sein, sondern der ursprüngliche Wert würde verändert werden.

Ein Array erzeugen und direkt mit einfachen Werten belegen (eindimensional):

$data = @('eins','zwei','drei','vier','fuenf')

PowerShell indexiert die Werte automatisch von 0-2, so dass eine Ausgabe Gesamt oder über den Indexwert möglich ist: Gesamtausgabe:

$data

Ausgabe von Elementen:

$data[0]  # 0 gibt das erste Element aus => 1
$data[0,2]                 # erstes und drittes Element ausgeben
$data[1..3]                # Elemente 2-4 ausgeben
$data[-1]                  # Letztes Element des Arrays ausgeben

Anzahl der Eintrag in einem Array ausgeben:

$data.count

Einen einzelnen Wert neu belegen

$data[2] = 'Dritter'

Iteratives abarbeiten der einzelnen Einträge:

$data | ForEach-Object {"Item: [$PSItem]"}

Array von Objekten

Ein Array von Objekten wird praktisch genauso behandelt wie ein Array von Werten.
Erzeugen eines Arrays von Objekten mit mehreren Eigenschaften:

$data = @([pscustomobject]@{Vorname='Hein'; Nachname='Blöd'}
                           [pscustomobject]@{Vorname='Bernd'; Nachname='Brot'}
                           [pscustomobject]@{Vorname='Tim'; Nachname='Taler'}
                           [pscustomobject]@{Vorname='Pippi'; Nachname='Langstrumpf'}
                           [pscustomobject]@{Vorname='Laura'; Nachname='Stern'})

Ansprechen von Objekten

$data[0]                             # erstes Objekt ansprechen
                 $data[0].vorname                     # Eigenschaft "Vorname" des ersten Objektes ausgeben
                 $data.vorname                        # Eigenschaft "Vorname" aller Objekte ausgaben
                 $data | ForEach-Object {$_.LastName} # Zeilenweise alle Objekte ausgeben (bearbeiten)

Operationen in Arrays

Join - Werte in Arrays verbinden

Über die Anweisung Join werden einzelne Werte des Arrays miteinander Verknüpft.

$data = @(1,2,3,4)
$data                 # Zeilenweise Ausgabe der Elemente
$data -join '-'       # Alle Elemente aneinandersetzen und zusammenausgeben
$data[0,2] -join '\'  # Elemente 1 und 3 zusammensetzen und durch einen "\" trennen (Bei Pfadangaben interessant)

contains - Suche nach einem String

Bei der Suche nach einem Muster in einem Feld wird mit „True“ oder „False“ ausgegeben, ob das Muster gefunden wurde.
Bei der Suche in einem kompletten Objekt werden die einzelnen Attribute nicht durchsucht.

$data -contains "Brot" # => False
$data.nachname -contains "bro" # => True

eq - Equal / ne - No Equal

Gibt alle Werte aus, die dem Suchmuster entsprechen bzw. nicht entsprechen.

$data.nachname -eq "brot" # => Brot
$data.nachname -ne "brot" # => Blöd, Taler, Langstrumpf, Stern

Arrays kombinieren

Arrays addieren

$first = @('Zero';'One')
$second = @('Two';'Three')
$first + $second  # alle Elemente beider Arrays ausgeben
$first += $second # Array "First" um Array "Second" erweitern

Array-Typen

Default: [PSObject[]]

Dies ist der Standard-Typ. Wird keine weitere Angabe gemacht, wird dieser Typ automatisch verwendet. Jedes Feld kann jeden Datentyp aufnehmen.

Strongly Typed Arrays: [int[]]

Hier wird eine Festlegung des Datentyps vorgenommen. Das kann erforderlich sein, wenn Zahlen nicht als Text erkannt werden sollen oder nachfolgende Operationen einen bestimmten, einheitlichen Datentyp erfordern. Die Eingabe eines unkorrekten Wertes führt hier zu einem Fehler.

[int[]] $numbers = 1,2,3

ArrayList: .Net

Eine etwas elegantere Methode ein Array zu befüllen gibt es über .Net. Dabei wird zunächst eine ArrayList über den entsprechenden .Net-Befehl erzeugt und in einer Variablen gespeichert. Danach kann über den Standard-Befehl „Add“ ein Wert hinzugefügt werden

$myarray = [System.Collections.ArrayList]::new()
[void]$myArray.Add('Value')

Fortgeschrittene Operationen

Arrays mit vorbelegter Größe

Bei Anlage bereits eine Menge n an Objekten festlegen. Anstelle von Werten werden die Felder mit Nullen gefüllt. Auch ohne echte Werte gibt das Zählen der Elemente bereits die vorgegebene Anzahl aus:

$data = [Object[]]::new(4)
$data.count # => 4

Arrays Multiplizieren

Kein rechnen, das Array wird n mal ausgeben:

$data = @('red','green','blue')
$data * 3

Verschachtelte Arrays / nested arrays

Arrays können auch Arrays anstelle von Objekten oder Werten enthalten

$data = @(@(1,2,3),@(4,5,6),@(7,8,9))
$data2 = @(@(1,2,3),@(4,5,6), @(7,8,9))

Das ansprechen eines bestimmten Wertes erfolgt über die Ansprache der einzelnen Ebenen von außen nach innen. Der Wert 3 ist der dritter Wert im ersten Array. Die Indexierung beginnt auch hier mit „0“, so das der Wert wie folgt angesprochen wird:

$data2[0][2]

Quelle

powershell/allgemein/array.txt · Zuletzt geändert: 2024/05/27 08:36 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki