Bird
Raised Fist0
PowerShellscripting~10 mins

Pipeline object flow in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Pipeline object flow
Start: Command 1 produces objects
↓
Objects flow through pipeline
↓
Command 2 receives objects one by one
↓
Command 2 processes each object
↓
Objects flow to next command or output
↓
End
Objects are passed one by one through the pipeline from one command to the next, allowing each command to process each object in turn.
Execution Sample
PowerShell
1..3 | ForEach-Object { $_ * 2 } | Where-Object { $_ -gt 3 }
This pipeline sends numbers 1 to 3, doubles each, then filters to keep only those greater than 3.
Execution Table
StepInput ObjectForEach-Object ActionOutput ObjectWhere-Object ConditionFinal Output
111 * 2 = 222 > 3? False
222 * 2 = 444 > 3? True4
333 * 2 = 666 > 3? True6
4End of inputPipeline ends
💡 Input numbers exhausted; pipeline completes after processing all objects.
Variable Tracker
VariableStartAfter 1After 2After 3Final
$_ (ForEach-Object)N/A123N/A
Output (ForEach-Object)N/A246N/A
$_ (Where-Object)N/A246N/A
Final OutputN/A46N/A
Key Moments - 2 Insights
Why does each command in the pipeline process objects one at a time instead of all at once?
Because PowerShell pipelines pass objects one by one, allowing each command to start processing immediately without waiting for all input, as shown in the execution_table where each input object flows stepwise.
What happens if an object does not meet the condition in Where-Object?
That object is filtered out and does not appear in the final output, as seen in step 1 where '2' fails the condition and is excluded.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output of ForEach-Object when the input object is 3?
A3
B6
C9
D1
💡 Hint
Check the 'ForEach-Object Action' column at step 3 in the execution_table.
At which step does the Where-Object filter out an object?
AStep 1
BStep 2
CStep 3
DNo filtering occurs
💡 Hint
Look at the 'Where-Object Condition' column in the execution_table for the step where the condition is false.
If the condition in Where-Object changed to '$_ -gt 1', what would be the final output?
A4, 6
B6 only
C2, 4, 6
DNo output
💡 Hint
Consider how the condition affects which objects pass, referencing the variable_tracker and execution_table.
Concept Snapshot
PowerShell pipelines pass objects one at a time from one command to the next.
Each command processes each object before passing it on.
This allows streaming and efficient processing.
Filtering commands like Where-Object remove objects that don't meet conditions.
Use ForEach-Object to transform each object individually.
Full Transcript
In PowerShell, pipelines send objects one by one from one command to the next. For example, the code '1..3 | ForEach-Object { $_ * 2 } | Where-Object { $_ -gt 3 }' sends numbers 1 to 3 through the pipeline. Each number is doubled by ForEach-Object, then filtered by Where-Object to keep only those greater than 3. The execution table shows each step: input object, action, and output. Objects that don't meet the condition are filtered out immediately. This stepwise flow lets commands start processing without waiting for all input. Variables like $_ change with each object processed. Understanding this flow helps write efficient PowerShell scripts.

Practice

(1/5)
1. What does the pipeline operator | do in PowerShell?
easy
A. It sends the output of one command as input to the next command.
B. It comments out the rest of the line.
C. It creates a new variable.
D. It ends the script execution.

Solution

  1. Step 1: Understand the pipeline operator

    The pipeline operator | connects commands by passing output from one as input to the next.
  2. Step 2: Identify its role in command chaining

    This allows commands to work together smoothly without temporary files or variables.
  3. Final Answer:

    It sends the output of one command as input to the next command. -> Option A
  4. Quick Check:

    Pipeline operator = passes output to next command [OK]
Hint: Pipeline | passes output to next command [OK]
Common Mistakes:
  • Thinking | is a comment symbol
  • Confusing | with variable assignment
  • Assuming | stops script execution
2. Which of the following is the correct syntax to filter files larger than 1MB using the pipeline?
easy
A. Get-ChildItem | Where-Object { $_.Length -gt 1MB }
B. Get-ChildItem | Where-Object { $_.Length > "1MB" }
C. Get-ChildItem | Where-Object { Length -gt 1MB }
D. Get-ChildItem | Where-Object Length -gt "1MB"

Solution

  1. Step 1: Check the correct property and operator usage

    In PowerShell, filter with Get-ChildItem | Where-Object { $_.Length -gt 1MB }. 1MB is a valid byte literal (1048576 bytes). Use $_. for current object and -gt for greater than.
  2. Step 2: Why others are incorrect

    B uses > "1MB" (string comparison, incorrect filtering). C omits $_. (undefined Length). D simplified syntax with "1MB" (string compare).
  3. Final Answer:

    Get-ChildItem | Where-Object { $_.Length -gt 1MB } -> Option A
  4. Quick Check:

    $_.Length -gt 1MB (numeric) [OK]
Hint: Use $_.Property inside braces for filtering [OK]
Common Mistakes:
  • Omitting $_. before property name
  • Quoting size (\"1MB\") causing string comparison
  • Misplacing parameters outside script block
3. What is the output of this command?
Get-Process | Where-Object { $_.CPU -gt 100 } | Select-Object -Property Name
medium
A. Empty list because no process uses CPU
B. List of all processes with CPU property
C. Error because CPU is not a valid property
D. List of process names using more than 100 CPU seconds

Solution

  1. Step 1: Filter processes by CPU usage

    The command filters processes where the CPU time is greater than 100 seconds.
  2. Step 2: Select only the Name property

    After filtering, it selects and outputs only the process names.
  3. Final Answer:

    List of process names using more than 100 CPU seconds -> Option D
  4. Quick Check:

    Filtering then selecting property = filtered names [OK]
Hint: Filter first, then select properties to see desired output [OK]
Common Mistakes:
  • Assuming CPU is not a valid property
  • Expecting full process details instead of just names
  • Thinking the output is empty without checking actual CPU usage
4. Identify the error in this pipeline:
Get-Service | Where-Object { $_.Status = 'Running' }
medium
A. Where-Object cannot be used with Get-Service
B. Missing pipeline operator (|) between commands
C. Using single equals (=) instead of comparison operator (-eq)
D. Incorrect property name 'Status'

Solution

  1. Step 1: Check the comparison operator in Where-Object

    The script uses = which is an assignment, not a comparison. PowerShell requires -eq for equality checks.
  2. Step 2: Confirm pipeline and property usage

    The pipeline operator is present and Status is a valid property of service objects.
  3. Final Answer:

    Using single equals (=) instead of comparison operator (-eq) -> Option C
  4. Quick Check:

    Use -eq for comparisons, not = [OK]
Hint: Use -eq for equality, not = inside script blocks [OK]
Common Mistakes:
  • Confusing = with -eq in conditions
  • Removing pipeline operator accidentally
  • Assuming property names are incorrect without checking
5. You want to list all files in a folder and its subfolders, sorted by size descending, but only show the top 5 largest files. Which pipeline command achieves this?
hard
A. Get-ChildItem | Sort-Object Length -Descending | Select-Object -First 5
B. Get-ChildItem -Recurse | Sort-Object Length -Descending | Select-Object -First 5
C. Get-ChildItem -Recurse | Where-Object Length -gt 5 | Sort-Object Length
D. Get-ChildItem -Recurse | Select-Object -First 5 | Sort-Object Length -Descending

Solution

  1. Step 1: Include all files recursively

    Use -Recurse with Get-ChildItem to get files in all subfolders.
  2. Step 2: Sort files by size descending and select top 5

    Sort by Length descending, then select the first 5 files.
  3. Final Answer:

    Get-ChildItem -Recurse | Sort-Object Length -Descending | Select-Object -First 5 -> Option B
  4. Quick Check:

    Recurse + sort descending + select first 5 = correct pipeline [OK]
Hint: Recurse first, then sort descending, then select top items [OK]
Common Mistakes:
  • Forgetting -Recurse to include subfolders
  • Selecting top 5 before sorting
  • Using Where-Object incorrectly to filter by number
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