PowerShell Array und Schleife (for, foreach)
Arrays und Schleifen
bewerten |
Ein Array speichert mehrere Werte, ähnlich einer 2 spaltigen Tabelle.
Beispiel
Als Beispiel könnten in einem Array 5 Werte eingetragen werden, diese können mittels ID wieder aufgerufen werden.
Hier ein einfaches Beispiel eines Arrays und deren gespeicherten Werte:
ID | Wert |
0 | wert1 |
1 | wert2 |
2 | wert3 |
3 | wert4 |
4 | wert5 |
Beim Aufruf der ID 1 würde bei Verwendung der Tabelle der Wert: "wert2" ausgegeben werden
Array
Das Erstellen eines Arrays funktioniert mit folgenden Befehl:
$array = @("wert1","wert2","wert3", "wert4", "wert5")
Die Werte können dann mit der ID 0- ... aufgerufen werden: $array[0], $array[1], ...
Die Ausgabe in Powershell erfolgt mittels:
Write-Host $array[0]
die Länge des Arrays, also die Anzahl der gespeicherten Werte, kann mit $array.length
ausgelesen werden
Die gespeicherten Werte eines Array können zum Beispiel mittels Loop (Schleife) verarbeitet werden.
Die folgenden Schleifen (abgesehen von foreach) haben diese Gemeinsamkeit:
- Eine Variable als Zähler (
$i
). Diese Variable dient zum Zählen, wann die Schleife verlassen werden soll. - Dem Zähler wird ein Startwert zugewiesen
($i=0)
- Der Startwert wird bei jedem Durchlauf der Schleife um 1 erhöht
($i++)
- bis der Endwert erreicht ist. Der Endwert ist die Länge des Array (
$array.length
) - Für die Überprüfung des Endwert gibt es eine Bedingung: solange
$i
kleiner der Anzahl der Werte ($i -lt $array.length
) siehe auch: PowerShell Syntax: vergleichen und verschachteln
For Schleife (for loop)
nehmen wir also obiges Beispiel, können wir mittels For-Schleife alle Werte im Array anzeigen lassen:
for ($i=0; $i -lt $array.length; $i++){
Write-Host $array[$i]
}
Der Befehl im Detail:
for ($i=0; $i -lt $array.length; $i++)
$i=0
... Startwert: Die Variable $i startet mit dem Wert 0
$i -lt $array.length
... Bedingung: die For Schleife wird solange ausgeführt, solange diese Bedingung erfüllt ist: solange die Variable $i
kleiner als $array.length
ist, solange also $i
kleiner 5 ist.
$i++
... Aktion bei einem Durchlauf der Schleife: $i++
bedeutet den Wert der Variable $i
um 1 erhöhen, bei jedem Durchlauf der Schleife wird $i
um 1 grösser: 0 .. 1 .. 2 .. 3 ....
while Schleife (while loop)
Wir bleiben beim selben Beispiel mit einer while-Schleife.
$i=0
while ($i -lt $array.length){
Write-Host $array[$i]
$i++
}
In dem Beispiel wird der Startwert $i
vor der Schleife definiert ($i=0)
Der Befehl im Detail:
while ($i -lt $array.length){
Innerhalb von while (.. steht die Bedingung für den Durchlauf der Schleife, solange diese erfüllt ist, wird die Schleife nicht verlassen:
$i -lt $array.length
... solange $i
kleiner $array.length
ist
Die Variable $i
wird in diesem Beispiel innerhalb der Schleife jeweils um den Wert 1 erhöht: $i++
Endlosschleife -Endless Loop
while kann für eine Endlosschleife folgendermaßen verwendet werden:
while($true) {
Script-Block
}
mit break
kann die Endlosschleife wieder verlassen werden. Folgendes Beispiel durchläuft die Schleife bis break
ausgeführt wird, dies passiert wenn $i
nicht mehr kleiner 10 ist:
$i=0
while($true) {
$i++
write-host $i
if ($i -ge 10) {break}
}
do while Schleife (do loop)
$i=0
do{
Write-Host $array[$i]
$i++
} while ($i -lt $array.length)
foreach
Foreach wird verwendet um alle vorhandenen Werte auszulesen. Foreach benötigt für das Ausführen keinen Start und Endwert. Die Ausgelesenen Werte werden in einer Variable (im Beispiel: $i
) gespeichert.
foreach ($i in $array){
Write-Host $i
}
Der Befehl im Detail:
foreach ($i in $array)
.. Aufruf aller Werte des Array($array)
. Die Variable $i
enthält bei jedem Durchlauf den aktuell ausgelesenen Wert.
Kommentare
(Nr.:4) Datum:26.04.2016 16:53
Name :
PowerShell
Kommentar : Funktioniert doch alles...
Aber bei der while Schleife würde ich ein -lt statt -le verwenden.
Bei der Ausgabe wird am Ende (6. Durchlauf) eine Leerzeile durch das nicht vorhandene 6. Element erzeugt. Zum Verdeutlichen habe ich i mit ausgegeben.
Es stört hier nicht, alles ausgegeben werden soll, kann in anderen Szenarien aber zu Problemen führen.
$i=0
while ($i -lt $array.length){
Write-Host $array[$i]
$i
$i++
}
Webmaster: danke, habe ich ausgebessert
(Nr.:3) Datum:11.02.2016 10:58
Name :
Wittgenstein
Kommentar : Interessant ist auch, dass man Arrays in eine foreach pipen kann:
$array | foreach { $_ }
ist das gleiche wie
foreach ($i in $array)
{
$i
}
(Nr.:2) Datum:10.11.2015 15:44
Name :
vagabond3
Kommentar : wäre für mich als blutigen anfänger schön, wenn ihr den code erstmal selbst testet, bevor ihr ihn online stellt...und der 2. nicht einfach den mist vom vorgänger ungeprüft abkupfert... ;-P
Webmaster: Für mich wäre 3. interessant was genau nicht funktioniert ;-P
(Nr.:1) Datum:12.12.2013 12:59
Name :
xermicus
Kommentar : Einfacher geht die Abfrage über ein foreach-Konstrukt:
$array = @("wert1","wert2",wert3, "wert4", "wert5")
foreach ($item in $array)
{
write-host $item
}
Kommentar abgeben:
(kein lästiges anmelden, einfach posten!)
andere Themen getagged mit #Array