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 = @("wert1","wert2","wert3", "wert4", "wert5")
Write-Host $array[0]
Result:
wert1
Die LĂ€nge des Arrays, also die Anzahl der gespeicherten Werte, kann mit $array.length
ausgelesen werden
$array = @("wert1","wert2","wert3", "wert4", "wert5")
$array.length
Result:
5
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:
$array = @("wert1","wert2","wert3", "wert4", "wert5")
for ($i=0; $i -lt $array.length; $i++){
Write-Host $array[$i]
}
Result:
wert1
wert2
wert3
wert4
wert5
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.
$array = @("wert1","wert2","wert3", "wert4", "wert5")
$i=0
while ($i -lt $array.length){
Write-Host $array[$i]
$i++
}
Result:
wert1
wert2
wert3
wert4
wert5
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}
}
Result:
1
2
3
4
5
6
7
8
9
10
do while Schleife (do loop)
$array = @("wert1","wert2","wert3", "wert4", "wert5")
$i=0
do{
Write-Host $array[$i]
$i++
} while ($i -lt $array.length)
Result:
wert1
wert2
wert3
wert4
wert5
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.
$array = @("wert1","wert2","wert3", "wert4", "wert5")
foreach ($i in $array){
Write-Host $i
}
Result:
wert1
wert2
wert3
wert4
wert5
 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.
foreach Pipe: | %
Bei Verwendung direkt in der Konsole, werden Befehle meist einfach ĂŒber eine Pipe "|" ĂŒbergeben: Mit einer Pipe kann das Array auch direkt an die Foreach-Schleife ĂŒbergeben werden. An dieser Stelle wird gerne das Alias % fĂŒr foreach verwendet:
PS C:\> @("wert1","wert2","wert3", "wert4", "wert5") | % { write-host $_ }
Result:
wert1
wert2
wert3
wert4
wert5
In der Schleife kann auf die Variable "$_" zugegriffen werden.

{{percentage}} % positiv

DANKE fĂŒr deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Wittgenstein Interessant ist auch, dass man Arrays in eine foreach pipen kann: $array | foreach { $_ } ist das gleiche wie foreach ($i in $array) { $i }
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
FĂŒr mich wĂ€re 3. interessant was genau nicht funktioniert ;-P
Beitrag erstellt von Bernhard
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
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
Beitrag erstellt von anonym
User: xermicus Einfacher geht die Abfrage er ein foreach-Konstrukt: $array = @("wert1","wert2",wert3, "wert4", "wert5") foreach ($item in $array) { write-host $item }
Alles ohne foreach: $array = @("wert1","wert2",wert3, "wert4", "wert5") $array | % { write-host $_ }
Beitrag erstellt von anonym
Hallo, Kurze Randbemerkung: % ist auch eine Foreach-Schleife, nur als Alias fĂŒr schreibfaule
Beitrag erstellt von anonym
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++ }
danke, habe ich ausgebessert
Beitrag erstellt von Bernhard