Redirecionar a Saída do PowerShell para um Arquivo com Out-File: Um Guia Completo

Se você está procurando por um cmdlet do PowerShell que possa armazenar a saída em um arquivo de texto, está com sorte. Você está prestes a aprender como usar o cmdlet Out-File do PowerShell junto com seu popular parâmetro Out-File -Append também!

Como Funciona o Out-File?

Este cmdlet do PowerShell é simples por natureza; seu único propósito é armazenar a saída recebida e salvá-la em um arquivo de texto.

Foi projetado para substituir o operador de redirecionamento de saída padrão (>). Mesmo nos dias do DOS, podíamos redirecionar a saída para um arquivo. Este cmdlet é a maneira do PowerShell de fazer isso.

O cmdlet Out-File é tipicamente usado no final do pipeline do PowerShell. Seu único propósito é enviar a saída bruta diretamente para um arquivo de texto sem consideração. Existem formas mínimas de ajustar como essa saída é escrita.

Enviando Saída para um Arquivo

Vamos dizer que você tenha um script que retorna uma lista de todos os serviços do Windows em seu computador. Quando você executa Get-Service, receberá todos os objetos que espera no console.

Mas talvez você queira salvar essa saída em um arquivo de texto. O cmdlet Out-File é uma ótima maneira de fazer isso. Você pode usá-lo encadeando praticamente qualquer coisa para ele via pipeline.

Você pode ver abaixo que a saída do Get-Service foi enviada para o cmdlet que criou um arquivo de texto chamado Services.txt que contém exatamente o que você vê no console.

PS> Get-Service | Out-File -FilePath C:\Services.txt
PS> Get-Content C:\Services.txt
Status   Name               DisplayName

Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Stopped  Appinfo            Application Information
Stopped  AppMgmt            Application Management
<SNIP>

Acrescentando a um Arquivo

Por padrão, ele sobrescreve qualquer coisa no arquivo de texto fornecido pelo parâmetro FilePath. No entanto, você pode substituir esse comportamento usando o parâmetro Append.

Talvez você esteja acumulando saída de console em um arquivo e gostaria de acrescentar texto a um arquivo em vez de sobrescrever. O parâmetro Append é seu melhor amigo.

Usando o parâmetro Out-File -Append, como você pode ver abaixo, observe que se você não o usar, o C:\File.txt é sobrescrito. Mas, assim que você adicionar o parâmetro Append, ele acrescenta a saída ao final.

PS> 'foo' | Out-File -FilePath C:\File.txt
PS> Get-Content -Path C:\File.txt
foo
PS> 'foo' | Out-File -FilePath C:\File.txt
PS> Get-Content C:\File.txt
foo
PS> 'foo' | Out-File -FilePath C:\File.txt -Append
PS> Get-Content C:\File.txt
foo foo

Alterando a Saída

Por padrão, este cmdlet tentará replicar o que é mostrado no console, mas há algumas maneiras de manipulá-lo. Por exemplo, o cmdlet possui um parâmetro NoNewLine que simplesmente remove todos os caracteres de nova linha.

PS> Get-Service | Out-File -FilePath C:\Services.txt -NoNewline
PS> Get-Content C:\Services.txt
Status   Name               DisplayName
------   ----               -----------
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application La

Ou, você pode cortar o texto em cada linha em um determinado número de caracteres também com o parâmetro Width.

PS> Get-Service | Out-File -FilePath C:\Services.txt -Width 30 
PS> Get-Content C:\Services.txt
Status   Name               DisplayName
------   -----              -----------
Stopped  AJRouter           Al

Conclusão

Out-File

Em um cenário do mundo real, este cmdlet funciona, mas existem maneiras melhores de armazenar a saída em um arquivo.

Este cmdlet não oferece opções reais para manipular a saída. Simplesmente salva a saída exatamente como mostrado no console. Este cmdlet é semelhante a uma transcrição do PowerShell que apenas escreve tudo diretamente em um arquivo de texto.

Os cmdlets Add-Content ou Set-Content sempre terão mais flexibilidade, mas se você precisar de uma maneira rápida de enviar a saída do PowerShell para um arquivo, Out-File é o caminho a percorrer.

Relacionado: Set-Content: A Maneira PowerShell de Escrever em um Arquivo

Source:
https://adamtheautomator.com/out-file/