Bird
Raised Fist0
PowerShellscripting~5 mins

Pipeline object flow in PowerShell

Choose your learning style10 modes available
Introduction
The pipeline lets you send data from one command to another easily, like passing a ball between friends.
You want to list files and then filter only certain types.
You need to get processes and sort them by memory use.
You want to find services that are running and display their names.
You want to take output from one command and use it as input for another without saving to a file.
Syntax
PowerShell
command1 | command2 | command3
The pipe symbol | sends output from one command as input to the next.
Each command works on objects, not just text, making it powerful and flexible.
Examples
Gets all running processes and sorts them by CPU usage from highest to lowest.
PowerShell
Get-Process | Sort-Object CPU -Descending
Lists all files and filters only those with the .txt extension.
PowerShell
Get-ChildItem | Where-Object { $_.Extension -eq ".txt" }
Finds all running services and shows their names and status.
PowerShell
Get-Service | Where-Object { $_.Status -eq "Running" } | Select-Object Name, Status
Sample Program
This script lists files in the current folder that are larger than 1000 bytes and shows their names and sizes.
PowerShell
Get-ChildItem | Where-Object { $_.Length -gt 1000 } | Select-Object Name, Length
OutputSuccess
Important Notes
The pipeline passes objects, so you can access properties like $_.Name or $_.Length inside commands.
Use curly braces { } to write conditions or scripts inside the pipeline.
You can chain many commands with | to build complex tasks step-by-step.
Summary
The pipeline uses | to send data from one command to another.
It works with objects, making filtering and sorting easy.
You can combine commands to do powerful tasks without extra files.

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