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