PowerShell Get-Content um Equivalente do PowerShell Tail

Com a automação, a leitura de dados de um arquivo de texto é um cenário comum. A maioria das linguagens de programação tem pelo menos uma maneira de ler arquivos de texto, e o PowerShell não é exceção. O cmdlet Get-Content do PowerShell, equivalente ao tail do PowerShell, lê o conteúdo de um arquivo de texto e importa os dados para uma sessão do PowerShell.

O cmdlet Get-Content do PowerShell é uma ferramenta indispensável quando você precisa usar arquivos de texto como entrada para o seu script. Talvez seu script do PowerShell precise ler uma lista de computadores para monitorar ou importar um modelo de e-mail para enviar aos seus usuários. O Get-Content do PowerShell suporta facilmente esses cenários!

E que tal seguir um arquivo de log em tempo real? Sim, o Get-Content do PowerShell também pode fazer isso! Continue lendo este artigo e você aprenderá como usar o cmdlet Get-Content para ler arquivos de texto no PowerShell.

Pré-requisitos

Se você estiver interessado em seguir os exemplos deste tutorial, precisará dos seguintes requisitos.

  • Você precisará de um computador com Windows 10. Este tutorial utiliza a versão 20H2 do Windows 10. Mas não se preocupe, você estará bem com a versão do Windows 10 que tiver.
  • Você deve ter pelo menos o Windows PowerShell 5.1, ou PowerShell 7.1 instalado no seu computador. Aqui é usada a versão 7.1 do PowerShell, mas qualquer versão funcionará!
  • Você estará escrevendo e testando comandos, então precisará de um editor de código. Os editores recomendados são o Windows PowerShell ISE, integrado ao Windows, e o Visual Studio Code (VSCode). Este artigo utiliza o VSCode.
  • Também será útil se você criar um diretório de trabalho no seu computador. A pasta de trabalho pode estar em qualquer lugar que você desejar. No entanto, observe que os exemplos neste tutorial residem na pasta C:\demo.
  • Para começar, você precisa de algum conteúdo! Crie um arquivo, no seu diretório de trabalho, com o nome fruits.txt que inclua dez frutas diferentes para simplificar. Você estará utilizando este arquivo de texto em todos os exemplos.
cherry
 berry
 apricot
 papaya
 raspberry
 melon
 peach
 tangerine
 cantaloupe
 orange

Não sabe qual versão do PowerShell você tem? Visite o artigo Como Verificar sua Versão do PowerShell (Todas as Maneiras!).

Lendo um Arquivo de Texto e Retornando o Resultado como um Array de Strings

O cmdlet Get-Content lê o conteúdo de um arquivo e, por padrão, retorna cada linha de um arquivo de texto como um objeto de string. Como resultado, a coleção de objetos do PowerShell se torna um array de objetos de string.

O código abaixo lê o conteúdo do arquivo fruits.txt e exibe o resultado no console do PowerShell, como visto na captura de tela abaixo.

Get-Content .\fruits.txt
Retrieving the text file content using PowerShell Get-Content.

Get-Content lê e armazena o conteúdo como um array, mas como você pode ter certeza disso? Primeiro, salve o conteúdo em um objeto do PowerShell que você pode examinar para determinar o tipo.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

Olhando para a captura de tela abaixo, a variável $fruits é uma matriz que contém dez objetos. Cada objeto representa uma única linha de texto.

Confirming that the text file content is stored as an array.

Retornando uma Linha Específica de um Arquivo de Texto

No exemplo anterior, você aprendeu que o resultado padrão de Get-Content é uma matriz ou uma coleção de objetos. Cada item em uma coleção corresponde a um número de índice, e os índices do PowerShell geralmente começam em zero.

A captura de tela abaixo mostra que existem dez itens na matriz de strings. A matriz indexou os dez itens de zero a nove.

Showing that the indexed items in the string array start at zero index.

Para exibir apenas a quinta linha de conteúdo, você precisará especificar o número de índice 4, entre colchetes (conhecido como notação de matriz).

(Get-Content .\fruits.txt)[4]

Você pode notar que o comando Get-Content está entre parênteses. Essa notação indica ao PowerShell para executar o comando entre parênteses primeiro antes de outras operações.

Na captura de tela abaixo, você verá que o único resultado retornado é raspberry, que é o item no índice 4 e corresponde à quinta linha no arquivo de texto.

Returning a specific line from Get-Content results.

E se você precisar obter o conteúdo na última linha? Felizmente, você não precisa saber o número total de linhas. Em vez disso, use [-1] como o índice, e Get-Content exibirá apenas a última linha do arquivo.

(Get-Content .\fruits.txt)[-1]

Limitando o Número de Principais Resultados Retornados por Get-Content

Use o parâmetro TotalCount do Get-Content para recuperar um número especificado de linhas de um arquivo de texto. O parâmetro TotalCount aceita um valor long, o que significa um valor máximo de 9.223.372.036.854.775.807.

Por exemplo, o comando abaixo lê o conteúdo e limita o resultado a três itens.

Get-Content .\fruits.txt -TotalCount 3

Como seria de esperar, o resultado abaixo exibe apenas as três primeiras linhas do início do arquivo de texto.

Reading the top three results using the Get-Content command and the TotalCount parameter.

Use o parâmetro Tail do PowerShell para retornar resultados do final de um arquivo

No exemplo anterior, você usou o cmdlet Get-Content do PowerShell para ler um arquivo de texto e limitar os resultados principais. Também é possível alcançar o oposto com o Get-Content do PowerShell. Use o parâmetro Tail do PowerShell para ler um número especificado de linhas do final de um arquivo.

O código de exemplo abaixo lê o arquivo de texto e exibe o conteúdo das quatro últimas linhas.

Get-Content .\fruits.txt -Tail 4

Após executar o comando tail do PowerShell, o resultado esperado será limitado às últimas quatro linhas de conteúdo, como mostrado na imagem abaixo.

Getting the results from the end of a file using the Get-Content Tail parameter.

O parâmetro Tail é frequentemente usado junto com o parâmetro Wait. Usar o parâmetro Wait mantém o arquivo aberto e verifica novos conteúdos a cada segundo. A demonstração abaixo mostra os parâmetros Tail e Wait em ação. Para sair do Wait, use a combinação de teclas CTRL+C.

Get-Content -Path .\fruits.txt -Tail 1 -Wait
Using the wait and Tail parameters with Get-Content.

Retornando os Resultados como uma Única String

Você pode ter notado em exemplos anteriores que lidou com arrays de strings como saída do PowerShell Get-Content. E como aprendeu até agora, a natureza dos arrays permite operar sobre o conteúdo item por item.

Arrays geralmente funcionam bem, mas podem dificultar a substituição de strings. O parâmetro Raw do Get-Content lê todo o conteúdo de um arquivo em um único objeto de string. Embora o código abaixo seja o mesmo usado no primeiro exemplo, o parâmetro Raw armazena o conteúdo do arquivo como uma única string.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt -Raw
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

A captura de tela abaixo demonstra que adicionar o parâmetro Raw ao Get-Content faz com que o conteúdo seja tratado como uma única string e não como um array de objetos.

Confirming that the Raw parameter of Get-Content reads the file content as a single string object.

Depois de obter o conteúdo de um arquivo em uma única string usando o parâmetro Raw, o que você pode fazer com ele? Talvez precise encontrar e substituir uma string dentro desse conteúdo do arquivo. No exemplo abaixo, o Get-Content lê o conteúdo de um arquivo como uma única string. Em seguida, usando o operador replace, substitui uma palavra específica por outra.

Relacionado: Encontrando e Substituindo Strings

# Obtenha o conteúdo bruto do arquivo de texto
$fruits = Get-Content .\fruits.txt -Raw
# Exiba o conteúdo
$fruits
# Encontre e substitua a palavra 'apricot' por 'mango'
$fruits -replace 'apricot','mango'
Reading the content of a text file as a single string and replacing a word using the replace operator.

Leia o conteúdo apenas de arquivos que corresponderam a um filtro

Você tem uma pasta cheia de arquivos, mas precisa ler o conteúdo de apenas alguns selecionados? Com PowerShell Get-Content, você não precisa filtrar os arquivos separadamente antes de ler o conteúdo deles. O parâmetro Filter do Get-Content limita quais arquivos o cmdlet lê.

Para demonstrar a leitura do conteúdo apenas de arquivos selecionados, primeiro, crie alguns arquivos para ler. Como mostrado abaixo, crie os arquivos na sua pasta de trabalho usando Add-Content.

# Add-Content cria o arquivo log1.log e log2.log se eles ainda não existirem e adiciona o valor fornecido
Add-Content -Value "This is the content in Log1.log" -Path C:\demo\Log1.log
Add-Content -Value "This is the content in Log2.log" -Path C:\demo\Log2.log
# Verifique se os arquivos foram criados
Get-ChildItem C:\demo
Creating test .log files using Add-Content.

Com seus arquivos de teste criados, use os parâmetros Filter e Path para ler apenas os arquivos .log no diretório raiz. O asterisco usado na definição do filtro indica ao Get-Content para ler qualquer arquivo com o final .log. O asterisco final do parâmetro de caminho limita a leitura dos arquivos apenas ao diretório raiz.

Get-Content -Path C:\demo* -Filter *.log

Como mostrado na saída abaixo, apenas o conteúdo dos arquivos .log é exibido.

Using the Filter parameter with PowerShell Get-Content to limit the read files.

Relacionado: Get-ChildItem: Listando Arquivos, Registro, Certificados e Mais como Um

Lendo o Fluxo de Dados Alternativo de um Arquivo

Até agora, você tem trabalhado exclusivamente com arquivos de texto, mas o Get-Content pode ler dados do fluxo de dados alternativo (ADS) de um arquivo. Sinta-se à vontade para ler mais sobre fluxos, mas você pode pensar em um fluxo como outro atributo de dados armazenado junto com o conteúdo típico do arquivo.

Os fluxos de dados alternativos são uma característica do sistema de arquivos NTFS do Windows, portanto, isso não se aplica ao Get-Content quando usado com sistemas operacionais não-Windows.

Você pode ver os fluxos de dados alternativos executando o Get-Item com o parâmetro Stream. Ao referenciar um arquivo usando o parâmetro Stream, Get-Item retorna uma propriedade chamada Stream como mostrado abaixo. Este fluxo de conteúdo de arquivo padrão é representado com :$DATA.

Para demonstrar o fluxo padrão :$DATA, use o cmdlet Get-Item para exibir todos os fluxos disponíveis no arquivo fruits.txt. Como mostrado abaixo, Get-Item exibe um único fluxo.

Get-Item -Path .\fruits.txt -Stream *
Listing all available streams in a file using Get-Item.

O parâmetro Stream do Get-Content lê explicitamente o conteúdo do fluxo padrão :$DATA como mostrado abaixo. O conteúdo retornado é o mesmo que a saída padrão do Get-Content já que o fluxo :$DATA é lido por padrão.

Get-Content -Path .\fruits.txt -Stream ':$DATA'
Explicitly reading the :$DATA stream using Get-Content.

Para demonstrar a recuperação de um fluxo de dados alternativo usando Get-Content, modifique um arquivo usando Add-Content para adicionar o novo fluxo. Use Get-Item para mostrar o novo fluxo junto com o fluxo padrão :$DATA, como visto no exemplo abaixo.

# Adicione um novo ADS chamado Secret ao arquivo fruits.txt
Add-Content -Path .\fruits.txt -Stream Secret -Value 'This is a secret. No one should find this.'
Get-Item -Path .\fruits.txt -Stream *
Adding the Secret alternate data stream using Add-Content and displaying the new stream with Get-Item.

Como apenas o fluxo :$DATA é lido por padrão, use o parâmetro Stream de Get-Content para recuperar o conteúdo do novo fluxo Secret. Como mostrado abaixo, o conteúdo do fluxo Secret é exibido em vez do conteúdo padrão do arquivo.

Get-Content -Path .\fruits.txt -Stream secret
Using Get-Content to read the Secret alternate data stream content.

Próximos Passos com PowerShell Get-Content

Neste artigo, você aprendeu muitas maneiras de usar Get-Content para ler e manipular conteúdo. Você até aprendeu que Get-Content é flexível o suficiente para ler conteúdo de fluxos de dados alternativos!

Com o que você aprendeu neste artigo, que outras maneiras você pode usar Get-Content em seu trabalho? Talvez você possa usar Get-Content para determinar se um arquivo de backup está desatualizado e acionar uma chamada automática para executar um trabalho de backup?

Source:
https://adamtheautomator.com/powershell-get-content/