Bird
Raised Fist0
PowerShellscripting~10 mins

ForEach loop in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - ForEach loop
Start with collection
↓
Pick next item
↓
Execute loop body with item
↓
More items?
No→Exit loop
↩Back to Pick next item
The ForEach loop picks each item from a collection one by one, runs the loop body using that item, and repeats until all items are processed.
Execution Sample
PowerShell
foreach ($item in 1..3) {
  Write-Output "Item: $item"
}
This loop prints each number from 1 to 3 on its own line.
Execution Table
IterationVariable $itemConditionActionOutput
111 in collection? YesPrint 'Item: 1'Item: 1
222 in collection? YesPrint 'Item: 2'Item: 2
333 in collection? YesPrint 'Item: 3'Item: 3
4N/ANo more itemsExit loop
💡 All items processed, no more items in collection
Variable Tracker
VariableStartAfter 1After 2After 3Final
$itemundefined1233
Key Moments - 2 Insights
What is the value of $item after the loop ends?
After the loop finishes (see execution_table row 4), $item retains the last value (3) because the loop variable persists in the current scope.
Does the loop run if the collection is empty?
No, the loop checks for items before running. If the collection is empty, it exits immediately (like row 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of $item during iteration 2?
A1
B2
C3
Dundefined
💡 Hint
Check the 'Variable $item' column at iteration 2 in the execution_table.
At which iteration does the loop stop running?
AAfter iteration 2
BAfter iteration 4
CAfter iteration 3
DIt never stops
💡 Hint
Look at the exit_note and the last row in execution_table.
If the collection was empty, how would the execution_table change?
AIt would have only one row showing exit immediately
BIt would have multiple rows with $item values
CIt would print items anyway
DIt would cause an error
💡 Hint
Refer to key_moments about empty collections and execution_table exit behavior.
Concept Snapshot
ForEach loop syntax:
foreach ($item in collection) {
  # code using $item
}

It runs the code block once for each item in the collection.
When no items remain, the loop ends.
$item holds the current item during each iteration.
Full Transcript
The ForEach loop in PowerShell takes each item from a list or collection one by one. For each item, it runs the code inside the loop using that item. When all items are done, the loop stops. In the example, numbers 1 to 3 are printed one by one. The variable $item changes each time to the current number. After the loop ends, $item retains the last value (3). If the collection is empty, the loop does not run at all.

Practice

(1/5)
1. What does the foreach loop do in PowerShell?
easy
A. Creates a new collection from scratch
B. Runs code only once regardless of the collection
C. Repeats a block of code for each item in a collection
D. Stops the script immediately

Solution

  1. Step 1: Understand the foreach loop purpose

    The foreach loop is designed to repeat actions for every item in a list or collection.
  2. Step 2: Compare options to this purpose

    Only Repeats a block of code for each item in a collection correctly describes repeating code for each item in a collection.
  3. Final Answer:

    Repeats a block of code for each item in a collection -> Option C
  4. Quick Check:

    foreach = repeat for each item [OK]
Hint: Think: foreach means 'for each item' repeat [OK]
Common Mistakes:
  • Confusing foreach with a one-time action
  • Thinking foreach creates new collections
  • Believing foreach stops the script
2. Which of the following is the correct syntax for a foreach loop in PowerShell?
easy
A. foreach ($item in $list) { Write-Output $item }
B. foreach $item in $list { Write-Output $item }
C. foreach ($item : $list) { Write-Output $item }
D. foreach ($item; $list) { Write-Output $item }

Solution

  1. Step 1: Recall correct foreach syntax

    PowerShell foreach loops use: foreach ($var in $collection) { ... }
  2. Step 2: Match options to syntax

    Only foreach ($item in $list) { Write-Output $item } uses the correct 'in' keyword and parentheses.
  3. Final Answer:

    foreach ($item in $list) { Write-Output $item } -> Option A
  4. Quick Check:

    Syntax uses 'in' keyword inside parentheses [OK]
Hint: Look for 'foreach ($var in $collection)' pattern [OK]
Common Mistakes:
  • Omitting parentheses around variable and collection
  • Using ':' or ';' instead of 'in'
  • Missing the 'in' keyword
3. What will be the output of this PowerShell script?
foreach ($num in 1..3) { Write-Output ($num * 2) }
medium
A. 2 4 6
B. 1 2 3
C. 3 6 9
D. Error: Invalid syntax

Solution

  1. Step 1: Understand the loop range

    The loop runs for numbers 1, 2, and 3.
  2. Step 2: Calculate output for each iteration

    Each number is multiplied by 2, so outputs are 2, 4, and 6.
  3. Final Answer:

    2 4 6 -> Option A
  4. Quick Check:

    1*2=2, 2*2=4, 3*2=6 [OK]
Hint: Multiply each loop number by 2 mentally [OK]
Common Mistakes:
  • Confusing the range operator '..'
  • Thinking output is original numbers
  • Expecting syntax error
4. Identify the error in this PowerShell foreach loop:
foreach $item in $array { Write-Output $item }
medium
A. No error, code is correct
B. Missing parentheses around the loop variable and collection
C. Using $item instead of $i as loop variable
D. Incorrect use of Write-Output

Solution

  1. Step 1: Check foreach syntax

    PowerShell requires parentheses around the variable and collection in foreach loops.
  2. Step 2: Identify missing parentheses

    The code lacks parentheses: it should be foreach ($item in $array) { ... }
  3. Final Answer:

    Missing parentheses around the loop variable and collection -> Option B
  4. Quick Check:

    foreach needs parentheses [OK]
Hint: Always use parentheses in foreach syntax [OK]
Common Mistakes:
  • Omitting parentheses
  • Confusing variable names
  • Thinking Write-Output causes error
5. You have a list of filenames stored in $files. You want to print only those filenames that end with '.txt' using a foreach loop. Which script correctly does this?
hard
A. foreach ($file in $files) { if ($file -eq '*.txt') { Write-Output $file } }
B. foreach ($file in $files) { if ($file contains '.txt') { Write-Output $file } }
C. foreach ($file in $files) { Write-Output $file -match '.txt' }
D. foreach ($file in $files) { if ($file -like '*.txt') { Write-Output $file } }

Solution

  1. Step 1: Understand filtering condition

    To check if a filename ends with '.txt', use the '-like' operator with '*.txt' pattern.
  2. Step 2: Verify foreach loop and condition

    foreach ($file in $files) { if ($file -like '*.txt') { Write-Output $file } } correctly uses foreach with an if condition checking '-like "*.txt"' and outputs matching files.
  3. Final Answer:

    foreach ($file in $files) { if ($file -like '*.txt') { Write-Output $file } } -> Option D
  4. Quick Check:

    Use '-like' with wildcard for pattern match [OK]
Hint: Use '-like "*.txt"' inside if in foreach [OK]
Common Mistakes:
  • Using '-eq' instead of '-like' for pattern matching
  • Misusing '-match' without if condition
  • Using 'contains' which is invalid here
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard