PowerShell: Piping Output and Input

By Xah Lee. Date: . Last updated: .

PowerShell lets you send one command's output to the next command's input, called piping. This is similar to the idea of nesting functions, but using a linear syntax.

For example, suppose you have function f, g, h, and you want to compute h(g(f(x)))

In bash and powershell, you can write it as: x | f | g | h

Here are some examples:

# list current dir, sort it
dir | sort

# list, sort, show first 5 elements
dir | sort | select -first 5

# list, sort, select, then format for display
dir | sort | select -first 5 | format-table name, length
# list help topics with summary
Get-Help about* | Select-Object Name,Synopsis | Format-Table -Auto
# moving png image files to another dir
Get-Item $HOME/Documents/*png | Move-Item -Destination $HOME/Pictures/
# filter out bot access from web log, save to file
get-content web-log.txt |
select-string -notmatch "Googlebot" |
out-file -Encoding utf8 -width 999000 web-log2.txt
# piping example on showing processes
Get-Process | Select-Object Name

Get-Process | Sort-Object ID -descending

Get-Process |
Where-Object { $_.Handles -ge 500 } |
Sort-Object Handles |
Format-Table Handles,Name,Description -Auto

Note that the output of PowerShell are .NET objects. They display on screen as formatted text representation. Unlike unix shells, it is not passing text streams.

# using get-member to see object's members
dir | get-member

If you have a question, put $5 at patreon and message me.


xah powershell logo
  1. Install, Start, Exit
  2. Help Command
  3. as cmd.exe, bash
  4. list Alias
  5. Piping
  6. Env Vars
  7. Automatic Variables
  8. Write Script
  9. PowerShell vs Bash