Redirecionamento de saída
O PowerShell fornece vários cmdlets que permitem controlar a saída de dados diretamente. Esses cmdlets compartilham duas características importantes.
Primeiro, eles geralmente transformam dados em alguma forma de texto. Eles fazem isso porque produzem os dados para componentes do sistema que exigem entrada de texto. Isso significa que eles precisam representar os objetos como texto. Portanto, o texto é formatado como você o vê na janela do console do PowerShell.
Em segundo lugar, esses cmdlets usam o verbo out do PowerShell porque enviam informações do PowerShell para outro lugar.
Saída da consola
Por padrão, o PowerShell envia dados para a janela do host, que é exatamente o que o Out-Host
cmdlet faz. O uso principal do cmdlet é a Out-Host
paginação. Por exemplo, o comando a seguir usa Out-Host
para paginar a saída do Get-Command
cmdlet:
Get-Command | Out-Host -Paging
A exibição da janela do host está fora do PowerShell. Isso é importante porque quando os dados são enviados para fora do PowerShell, eles são realmente removidos. Você pode ver isso se tentar criar um pipeline que armazene dados na janela do host e, em seguida, tentar formatá-lo como uma lista, conforme mostrado aqui:
Get-Process | Out-Host -Paging | Format-List
Você pode esperar que o comando exiba páginas de informações do processo em formato de lista. Em vez disso, ele exibe a lista tabular padrão:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
101 5 1076 3316 32 0.05 2888 alg
...
618 18 39348 51108 143 211.20 740 explorer
257 8 9752 16828 79 3.02 2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...
O Out-Host
cmdlet envia os dados diretamente para o console, para que o Format-List
comando nunca receba nada para formatar.
A maneira correta de estruturar esse comando é colocar o Out-Host
cmdlet no final do pipeline, conforme mostrado abaixo. Isso faz com que os dados do processo sejam formatados em uma lista antes de serem paginados e exibidos.
Get-Process | Format-List | Out-Host -Paging
Id : 2888
Handles : 101
CPU : 0.046875
Name : alg
...
Id : 740
Handles : 612
CPU : 211.703125
Name : explorer
Id : 2560
Handles : 257
CPU : 3.015625
Name : explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Isso se aplica a todos os cmdlets out . Um cmdlet out deve sempre aparecer no final do pipeline.
Nota
Todos os cmdlets out renderizam a saída como texto, usando a formatação em vigor para a janela do console, incluindo limites de comprimento de linha.
Descartando saída
O Out-Null
cmdlet foi projetado para descartar imediatamente qualquer entrada recebida. Isso é útil para descartar dados desnecessários que você obtém como efeito colateral da execução de um comando. Ao digitar o seguinte comando, você não recebe nada de volta do comando:
Get-Command | Out-Null
O Out-Null
cmdlet não descarta a saída de erro. Por exemplo, se você inserir o seguinte comando, uma mensagem será exibida informando que o PowerShell não reconhece Is-NotACommand
:
PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' isn't recognized as a cmdlet, function, operable program, or script file.
At line:1 char:12
+ Get-Command <<<< Is-NotACommand | Out-Null
Impressão de dados
Out-Printer
só está disponível em plataformas Windows.
Você pode imprimir dados usando o Out-Printer
cmdlet. O Out-Printer
cmdlet usa sua impressora padrão se você não fornecer um nome de impressora. Você pode usar qualquer impressora baseada no Windows especificando seu nome para exibição. Não há necessidade de qualquer tipo de mapeamento de porta de impressora ou mesmo uma impressora física real.
Por exemplo, se você tiver as ferramentas de criação de imagens de documentos do Microsoft Office instaladas, poderá enviar os dados para um arquivo de imagem digitando:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Guardar dados
Você pode enviar a saída para um arquivo em vez da janela do console usando o Out-File
cmdlet. A seguinte linha de comando envia uma lista de processos para o arquivo C:\temp\processlist.txt
:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
Os resultados do uso do cmdlet podem não ser o esperado se você estiver acostumado com o Out-File
redirecionamento de saída tradicional. Para entender seu comportamento, você deve estar ciente do contexto no qual o Out-File
cmdlet opera.
No Windows PowerShell 5.1, o Out-File
cmdlet cria um arquivo Unicode. Algumas ferramentas, que esperam arquivos ASCII, não funcionam corretamente com o formato de saída padrão. Você pode alterar o formato de saída padrão para ASCII usando o parâmetro Encoding :
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file
Formata o conteúdo do arquivo para se parecer com a saída do console. Isso faz com que a saída seja truncada assim como está em uma janela de console na maioria das circunstâncias. Por exemplo, se você executar o seguinte comando:
Get-Command | Out-File -FilePath c:\temp\output.txt
A saída terá esta aparência:
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
Para obter uma saída que não force quebras de linha para corresponder à largura da tela, você pode usar o parâmetro Width para especificar a largura da linha. Como Width é um parâmetro inteiro de 32 bits, o valor máximo que ele pode ter é 2147483647. Digite o seguinte para definir a largura da linha para esse valor máximo:
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647
O Out-File
cmdlet é mais útil quando você deseja salvar a saída como ela seria exibida no console.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários