Bird
Raised Fist0
PowerShellscripting~10 mins

Pipeline concept (|) in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Pipeline concept (|)
Command 1 executes
↓
Output objects from Command 1
↓
Pipeline operator | passes objects
↓
Command 2 receives objects as input
↓
Command 2 processes and outputs result
↓
Display final output
The pipeline sends output objects from one command directly as input to the next command, chaining commands smoothly.
Execution Sample
PowerShell
Get-Process | Where-Object {$_.CPU -gt 100} | Select-Object -Property Id, ProcessName
This command gets all processes, filters those using more than 100 CPU units, then selects and shows their Id and ProcessName.
Execution Table
StepCommandInputActionOutput
1Get-ProcessNoneRetrieve all running processesList of process objects
2Where-Object {$_.CPU -gt 100}List of process objectsFilter processes with CPU > 100Filtered list of process objects
3Select-Object -Property Id, ProcessNameFiltered list of process objectsSelect only Id and ProcessName propertiesList of objects with Id and ProcessName
4OutputList of objects with Id and ProcessNameDisplay on screenTable of Id and ProcessName
💡 Pipeline ends after Select-Object outputs the final filtered and selected process list.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final Output
ProcessesNoneAll running processesProcesses with CPU > 100Processes with only Id and ProcessNameDisplayed table of Id and ProcessName
Key Moments - 3 Insights
Why does the output of Get-Process go directly into Where-Object without storing in a variable?
Because the pipeline operator (|) passes the output objects directly from Get-Process to Where-Object, so no need to store them separately. See execution_table steps 1 and 2.
What type of data is passed through the pipeline between commands?
PowerShell passes objects, not just text, so each command receives full objects to work with. This is shown in execution_table where process objects flow through steps.
Can the pipeline have more than two commands chained?
Yes, as shown in the example, three commands are chained with two pipeline operators, passing data step-by-step until final output.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output of Step 2?
AFiltered list of process objects with CPU > 100
BAll running processes
CList of objects with only Id and ProcessName
DDisplayed table of Id and ProcessName
💡 Hint
Check the 'Output' column in row for Step 2 in execution_table.
At which step does the pipeline select only specific properties of the processes?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Command' and 'Action' columns in execution_table for Step 3.
If we remove the pipeline operator between Get-Process and Where-Object, what happens?
AWhere-Object receives no input and returns nothing
BCommands run sequentially but not connected
CGet-Process output is stored automatically
DThe script throws a syntax error
💡 Hint
Think about how pipeline operator connects commands as shown in concept_flow.
Concept Snapshot
PowerShell pipeline (|) passes output objects from one command as input to the next.
Commands chain smoothly: Command1 | Command2 | Command3.
Objects flow, not just text, enabling powerful filtering and selection.
No need for temporary variables between commands.
Final output displays after last command processes data.
Full Transcript
The PowerShell pipeline operator (|) connects commands by passing output objects from one command directly as input to the next. For example, Get-Process retrieves all running processes and sends them through the pipeline to Where-Object, which filters processes using more than 100 CPU units. Then Select-Object picks only the Id and ProcessName properties to display. This chaining avoids storing intermediate results in variables. Each step processes objects, not just text, enabling powerful and efficient scripting. The pipeline ends after the last command outputs the final result to the screen.

Practice

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

Solution

  1. Step 1: Understand the pipeline operator

    The pipeline | connects commands so the output of the first command flows as input to the next.
  2. Step 2: Identify the correct description

    Only It passes the output of one command as input to the next command. correctly describes this behavior; others describe unrelated actions.
  3. Final Answer:

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

    Pipeline = Pass output to next command [OK]
Hint: Pipeline passes output to next command in sequence [OK]
Common Mistakes:
  • Thinking pipeline runs commands in parallel
  • Confusing pipeline with comments
  • Assuming pipeline creates variables
2. Which of the following is the correct syntax to list all processes and then sort them by CPU usage using the pipeline?
easy
A. Get-Process Sort CPU
B. Get-Process | Sort-Object CPU
C. Get-Process | Sort-Object -CPU
D. Get-Process Sort-Object CPU

Solution

  1. Step 1: Identify correct pipeline usage

    The pipeline operator | must connect commands properly; Get-Process | Sort-Object CPU uses it correctly.
  2. Step 2: Check Sort-Object parameters

    Sorting by property CPU is done with Sort-Object CPU, which Get-Process | Sort-Object CPU uses correctly.
  3. Final Answer:

    Get-Process | Sort-Object CPU -> Option B
  4. Quick Check:

    Correct pipeline and sorting syntax = Get-Process | Sort-Object CPU [OK]
Hint: Use | between commands and correct parameter names [OK]
Common Mistakes:
  • Omitting the pipeline operator
  • Using wrong parameter syntax like -CPU
  • Using non-existent commands like Sort CPU
3. What is the output of this PowerShell command?
Get-Process | Where-Object { $_.CPU -gt 100 } | Select-Object -First 1 -Property ProcessName
medium
A. The name of the first process with CPU usage greater than 100
B. A list of all processes with CPU usage less than 100
C. An error because of incorrect pipeline usage
D. The total CPU usage of all processes

Solution

  1. Step 1: Analyze the pipeline commands

    Get-Process gets all processes, Where-Object { $_.CPU -gt 100 } filters those with CPU > 100.
  2. Step 2: Understand the selection

    Select-Object -First 1 -Property ProcessName picks the first such process and shows its name.
  3. Final Answer:

    The name of the first process with CPU usage greater than 100 -> Option A
  4. Quick Check:

    Pipeline filters then selects first matching process name [OK]
Hint: Filter with Where-Object, then select first with Select-Object [OK]
Common Mistakes:
  • Confusing CPU greater than with less than
  • Expecting a list instead of one item
  • Thinking pipeline causes errors here
4. Identify the error in this pipeline command:
Get-Service | Where-Object Status -eq 'Running' | Select Name
medium
A. Select should be Select-Object, not Select.
B. Get-Service cannot be piped to Where-Object.
C. The comparison operator should be inside the script block {} in Where-Object.
D. The pipeline operator is missing.

Solution

  1. Step 1: Check Where-Object syntax

    The condition must be inside a script block: { $_.Status -eq 'Running' }. The given command misses the braces.
  2. Step 2: Verify other parts

    Select is an alias for Select-Object, so it's valid. Get-Service can be piped. Pipeline operator is present.
  3. Final Answer:

    The comparison operator should be inside the script block {} in Where-Object. -> Option C
  4. Quick Check:

    Where-Object needs script block for conditions [OK]
Hint: Put conditions inside {} for Where-Object [OK]
Common Mistakes:
  • Omitting braces {} in Where-Object
  • Thinking Select is invalid
  • Assuming pipeline operator is missing
5. You want to get the top 3 services sorted by their status alphabetically, but only those that are running. Which pipeline command achieves this?
hard
A. Get-Service | Where-Object { $_.Status -eq 'Running' } | Sort-Object Status | Select-Object -First 3
B. Get-Service | Sort-Object Status | Select-Object -First 3 | Where-Object { $_.Status -eq 'Running' }
C. Get-Service | Select-Object -First 3 | Where-Object { $_.Status -eq 'Running' } | Sort-Object Status
D. Get-Service | Where-Object Status -eq 'Running' | Select-Object -First 3 | Sort-Object Status

Solution

  1. Step 1: Filter running services first

    Use Where-Object { $_.Status -eq 'Running' } to keep only running services.
  2. Step 2: Sort filtered services by Status

    Then sort them alphabetically with Sort-Object Status.
  3. Step 3: Select the first 3 services

    Finally, pick the top 3 with Select-Object -First 3.
  4. Final Answer:

    Get-Service | Where-Object { $_.Status -eq 'Running' } | Sort-Object Status | Select-Object -First 3 -> Option A
  5. Quick Check:

    Filter, then sort, then select top 3 [OK]
Hint: Filter first, then sort, then select top items [OK]
Common Mistakes:
  • Sorting before filtering changes results
  • Selecting before filtering loses data
  • Missing braces in Where-Object
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