O pipeline funciona virtualmente em todos os lugares do Windows PowerShell. Embora você veja texto na tela, o Windows PowerShell não o coloca no pipeline entre comandos. Em vez disso, ele envia os objetos pelo pipeline.

A notação usada para pipelines é similar à utilizada em outros shells, portanto, à primeira vista, pode não ser aparente que o Windows PowerShell está apresentando algo novo. Por exemplo, se você usar o cmdlet Out-Host para forçar uma exibição página por página da saída de outro comando, ela terá a aparência de um texto normal exibido na tela, dividido em páginas:

PS> Get-ChildItem -Path C:\WINDOWS\System32 | Out-Host -Paging

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\system32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2005-10-22  11:04 PM        315 $winnt$.inf
-a---        2004-08-04   8:00 AM      68608 access.cpl
-a---        2004-08-04   8:00 AM      64512 acctres.dll
-a---        2004-08-04   8:00 AM     183808 accwiz.exe
-a---        2004-08-04   8:00 AM      61952 acelpdec.ax
-a---        2004-08-04   8:00 AM     129536 acledit.dll
-a---        2004-08-04   8:00 AM     114688 aclui.dll
-a---        2004-08-04   8:00 AM     194048 activeds.dll
-a---        2004-08-04   8:00 AM     111104 activeds.tlb
-a---        2004-08-04   8:00 AM       4096 actmovie.exe
-a---        2004-08-04   8:00 AM     101888 actxprxy.dll
-a---        2003-02-21   6:50 PM     143150 admgmt.msc
-a---        2006-01-25   3:35 PM      53760 admparse.dll
<SPACE> next page; <CR> next line; Q quit
...

O comando Out-Host -Paging é um elemento de pipeline útil sempre que você tem uma saída longa que gostaria de exibir lentamente. Será especialmente útil se a operação utilizar muito a CPU. Como o processamento é transferido para o cmdlet Out-Host quando há uma página completa pronta para ser exibida, os cmdlets que o precedem no pipeline interrompem a operação até que a nova página de saída esteja disponível. Você pode ver isso se usar o Gerenciador de tarefas do Windows para monitorar a CPU e a memória utilizadas pelo Windows PowerShell.

Execute o seguinte comando: Get-ChildItem C:\Windows -Recurse. Compare o uso da CPU e da memória com o deste comando: Get-ChildItem C:\Windows -Recurse | Out-Host -Paging. O que você vê na tela é texto, mas isso só acontece porque é necessário representar objetos como texto em uma janela de console. Essa é apenas uma representação do que realmente está acontecendo no Windows PowerShell. Por exemplo, considere o cmdlet Get-Location. Se você digitar Get-Location quando o local atual for a raiz da unidade C, verá a seguinte saída:

PS> Get-Location

Path
----
C:\

Se o Windows PowerShell enviasse o texto pelo pipeline, emitindo um comando como Get-Location | Out-Host, ele passaria um conjunto de caracteres de Get-Location para Out-Host na ordem em que seriam exibidos na tela. Em outras palavras, se você tivesse de ignorar as informações do cabeçalho, Out-Host primeiro receberia o caractere 'C', o caractere ':' e, por fim, o caractere '\'. O cmdlet Out-Host não poderia determinar o significado associado à saída de caracteres feita pelo cmdlet Get-Location.

Em vez de usar texto para permitir a comunicação de comandos em um pipeline, o Windows PowerShell utiliza objetos. Do ponto de vista do usuário, os objetos empacotam informações relacionadas de uma forma que facilita a sua manipulação como unidade e extraem os itens específicos de que você precisa.

O comando Get-Location não retorna o texto que contém o caminho atual. Ele retorna um pacote de informações denominado objeto PathInfo, que contém o caminho atual e outras informações. O cmdlet Out-Host envia então esse objeto PathInfo para a tela e o Windows PowerShell decide qual informação será exibida e como exibi-la, baseando-se em suas regras de formatação.

Na verdade, a saída de informações de cabeçalho pelo cmdlet Get-Location é adicionada somente ao final do processo, como parte da formatação dos dados para exibição na tela. O que você vê na tela é um resumo das informações, e não uma representação completa do objeto de saída.

Dado que pode haver mais saída de informações de um comando do Windows PowerShell do que é exibido na janela do console, como você pode recuperar os elementos não visíveis? Como é possível visualizar os dados extras? E se você quiser exibir os dados em um formato diferente do normalmente utilizado pelo Windows PowerShell?

O restante deste capítulo discutirá como você pode descobrir a estrutura de objetos específicos do Windows PowerShell, selecionando determinados itens e formatando-os para uma exibição mais fácil, e como enviar essas informações para locais alternativos de saída, como arquivos e impressoras.




Sumário