Pipeline no PowerShell
O pipeline existe também em outros prompts de comando, mas no Powershell ele é usado de uma maneira diferente.
Basicamente o pipeline passa o resultado do comando da esquerda para o comando da direita. Isso é possível, pois o output do PowerShell é um objeto ao invés de texto.
O pipeline pode ser usado para passar o objeto a ser filtrado, formatado e exportado. Você pode usar mais de um pipeline na mesma linha.
Exemplificando: o cmdlet Get-Service retorna os serviços através de uma coleção de objetos do tipo System.ServiceProcess.ServiceController que o PowerShell renderiza como texto por default ao exibi-los no console (para saber o tipo de um objeto utilize o comando get-service | gm. Maiores detalhes em: Introdução ao PowerShell).
Entretanto, nós podemos acessar os objetos e usar suas propriedades e métodos diretamente, sem precisar de técnicas complexas de manipulação de texto.
Na figura abaixo o Get-Service é utilizado para retornar a coleção de objetos. O where-object é utilizado, após o primeiro pipeline, para filtrar apenas os serviços que possuem o status igual a “Stopped”. O comando Format-List, após o último pipeline, é utilizado para formatar o resultado no console em forma de lista.
Exemplos:
#cmdlet utilizado para obter os serviços que possuem o status "Stopped" e formatá-los como lista.
get-service | ? {$_.status -eq "Stopped"} | fl
#cmdlet utilizado para filtrar os processos que possuem o WorkingSet maior que 15MB, ordená-los pelo WS (WorkingSet) e exibir em formato de tabela as propriedades Id, Name e WS
Get-Process | Where { $_.WS –gt 15MB } | Sort WS | FT –property Id, Name, WS
#cmdlet utilizado para obter apenas o nome do arquivo
get-item c:\windows\windowsupdate.log | split-path –leaf
#cmdlet utilizado para obter o caminho do arquivo
get-item c:\windows\windowsupdate.log | split-path –parent