Script 3: Foreach

We willen op een snelle manier een lijst printen op on scherm van 1 tot en met 10.  Je wilt onderstaand resultaat bekomen. Hoe doe je dit ? 

Je kan dit op een heel snelle manier doen in Powershell, geef gewoon volgend commando in:

1..10

je kan dan met eender welke getallen doen, als je een lijst wilt printen van 10 tot en met 50 dan geef je volgend commando in:

10..50

En zo kan je maar door blijven gaan.

 

Nu zou je willen dat je deze getallen *2 zou willen doen dat je niet een lijst krijgt met 1 tot en met 10, maar een lijst krijgt 2,4,6,8,10,12,14,16,18,20.  Je gaat eigenlijk de array die je aanmaakt 1..10 onmiddellijk gaan vermenigvuldigen met 2, Powershell gaat ieder object (1,2,3,4,…) gaan vermenigvuldigen met 2. Hier voor gaan we een foreach loop gaan gebruiken. Je kan dus gaan zeggen, voor ieder object in deze array moet je het object eerst gaan vermenigvuldigen met 2 en dan pas mag je deze op het scherm printen.

Hoe doen we dit ? 

Eerst moet je weer gaan zeggen wat is de array die we willen aanmaken dat is 1 tot en met 10, dit kennen we al.

1..10

En nu zeggen we tegen powershell vermenigvuldig deze objecten 1 voor 1 met 2.

1..10 | ForEach-Object {$_ *2}

$_ is een placeholder, hier gaat iedere keer een ander object van de array zijn, dit commando gaat het commando tussen de {} zoveel keer gaan uit voeren, zoveel er objecten zijn (1..10, dit zijn 10 objecten)

dus de eerste keer dat dit word uit gevoerd staat daar eigenlijk {1 * 2} de tweede keer staat daar {2 * 2}, enz…

nu ga je dus volgen resultaat krijgen:

 

Open PowerShell ISE

Typ het volgende script over.

New-Item -ItemType Directory -path c:\data1
1..50 |ForEach-Object {New-Item -ItemType file `
-Path c:\data1 -Name "File_$_.txt"}

Wat zou dit script doen ? 

Download Script

Uitleg:

Regel 1:

Er word een folder aangemaakt met de naam ‘data1’ in C:\

Regel 2+3:

Er wordt eerst een verzameling getallen gemaakt van 1 tot 50, dit noemen we een array

Regel 2 + 3:

Vervolgens wordt deze array doorgegeven aan het volgende commando door | (Dit noemen we een pipe)

Elk getal in de array is een object, op elk object wordt een bewerking uitgevoerd, deze bewering staat tussen {}

Regel 2 + 3:

Het commando ForEach-Object ‘voert’ de getallen stuk voor stuk aan de bewerking

De bewerking zelf maakt een nieuw bestand aan New-Item –ItemType file in de map die wordt genoemd bij de parameter path.

Regel 2 + 3:

De bestandsnaam van de file bestaat uit een stukje tekst File_ en dan twee karakters $_ en vervolgens de extentie .txt

$_ is een placeholder, elke keer komt het volgende object uit de array daar te staan

Regel 2 + 3:

Dus de eerste keer wordt object 1 ‘gevoerd’ en onstaat de naam: File_1.txt

Vervolgens zorgt het volgende object uit de array dat de naam File_2.txt wordt, enz. tot dat alle objecten gebruikt zijn in de array