PowerShell Loops und Array

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.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 21.03.2013 von Bernhard
geändert am 11.10.2016 von Bernhard



Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
✍anonym
erstellt am 10.11.2015 15:11
User: vagabond3 
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

✍Bernhard
erstellt am 10.11.2015 15:11
Für mich wäre 3. interessant was genau nicht funktioniert ;-P

erstellt von Bernhard

✍anonym
erstellt am 22.03.2019 11:03
User: Micha 
Hallo, ich versuche verzweifelt nach einem Weg die kommastellen hochzuzähel, also 0.1/0.2 etc bis 10.
Hat jemand eine Idee?

$i = 0.1
While ($i -lt 10){$i + 0.1}

Ergebnis: endlosschlaufe 0.2
✍anonym
erstellt am 15.04.2020 17:04
soweit ich das sehe zählst Du $i zwar hoch, speicherst $i aber nicht mit dem neuen Wert. Deswegen bleibt es dann auch auf dem Ursprungswert.
Die Funktion ++ ist destruktiv, sie überschreibt also den Eingangswert selbständig mit dem neuen Wert.

While ($i -lt 10){$i = $i + 0.1}

würde klappen

erstellt von anonym

✍anonym
erstellt am 11.01.2019 16:01
User: Khan 
Danke !!!

✍anonym
erstellt am 26.04.2016 16:04
User: PowerShell 
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++
}
✍Bernhard
erstellt am 26.04.2016 16:04
danke, habe ich ausgebessert

erstellt von Bernhard

✍anonym
erstellt am 12.12.2013 12:12
User: xermicus 
Einfacher geht die Abfrage er ein foreach-Konstrukt:

$array = @("wert1","wert2",wert3, "wert4", "wert5")
foreach ($item in $array)
{
write-host $item
}
✍anonym
erstellt am 17.04.2020 15:04
Alles ohne foreach:
$array = @("wert1","wert2",wert3, "wert4", "wert5")
$array | % { write-host $_ }

erstellt von anonym
✍anonym
erstellt am 05.05.2020 07:05
Hallo,

Kurze Randbemerkung: 
% ist auch eine Foreach-Schleife, nur als Alias für schreibfaule

erstellt von anonym

✍anonym
erstellt am 11.02.2016 10:02
User: Wittgenstein 
Interessant ist auch, dass man Arrays in eine foreach pipen kann:

$array | foreach { $_ }

ist das gleiche wie

foreach ($i in $array)
{
   $i
}

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Mehr Details