Pipeline passes the cmdlet to another command by pipeline operators (|) (ASCII 124). Each pipeline operator sends the results of the preceding command to the next command. The output of the first command can be sent for processing as input to the second command and second command to third command. The result is a complex command chain or pipeline that’s composed of a series of simple commands.
For example:
Command-1 | Command-2 | Command-3
How to know if a command accepts pipeline values?
Look for “Accept Pipeline input? – True (By value or propertyname)”.
If it’s true, then pipeline can be used- for example: -InputObject <ServiceController[]>
Get-Help Stop-Service -Full

Example: Retrieve the service name and then stop that service with pipeline
Get-Service -Name 'MSIServer' | Stop-Service
Example: Get service by string then pipe the command to start service
'print spooler' | Get-Service | Start-Service
Create an array of services
$services = New-Object -TypeName System.Collections.ArrayList
$services.AddRange(@('spooler','w32tim)e'))
#pipe get-service for multiple services#
$services | Get-Service | Start-Service

