Este post foi actualizado mais recentemente a 7 de Dezembro de 2020.

4 min. lido.

De vez em quando, depara-se com uma situação, em que precisará de alguma forma de descarregar a saída da consola (ou transcrição) da execução de uma aplicação de consola. Na verdade, vou argumentar que isto acontece muito mais vezes do que se pensa – no meu caso, sempre que um cliente requer um trabalho ou uma função na Web, que normalmente se destacaria para o Azure, sendo executado nos servidores do cliente. Este post descreve como fazer isso.

Problema

Table of Contents

Partida de alguma coisa ou o app crashes, e o erro é registado no registo de eventos… Mas apenas o erro, não toda a transcrição. Gostaria de obter tudo, de descobrir o que realmente se passa, mas o registo de eventos não é o caminho a seguir.

Or, talvez esteja a investigar um erro que aconteceu a outra pessoa, mas apenas obtenha capturas de ecrã de erros de consola ou de registo de eventos, enquanto que em vez disso gostaria de obter toda a informação possível sobre o problema.

O que fazer?

Solução: operador de redireccionamento > para o salvamento!

É, felizmente, bastante fácil. Há várias maneiras de canalizar, despejar, redireccionar, registar, espelhar ou apenas guardar a saída para quase qualquer meio alvo imaginável, mas uma vez que odeio sempre procurar no Google por eles (e pela minha vida, não consigo lembrar-me de cor), estou a documentar aqui a minha maneira preferida.

Não é necessário canalizar a saída para ficheiro – porque o redireccionamento faz nativamente o que se poderia fazer com um cano e “Out-File -FilePath” ou comando semelhante.

Como redireccionar a saída para ficheiro em Powershell?

Pode direccionar toda a saída da consola (e portanto toda a transcrição PowerShell para o seu executável) para um ficheiro de texto fazendo algo do género:

executable.exe > output.txt 2>&1

OR

executable.exe *>&> output.txt

Este método apenas escreve tudo desde a janela da consola até um ficheiro – tão simples quanto isso!

Como redireccionar a saída da consola do seu executável personalizado para um ficheiro's console output to a file
Como redireccionar a saída da consola do seu executável personalizado para um ficheiro

E claro, não se limita apenas ao Pronto Comando (cmd.exe) – também funciona no Windows PowerShell:

Como redireccionar a saída da consola PowerShell do seu executável personalizado para um ficheiro's PowerShell console output to a file
Como para redireccionar a saída da consola PowerShell do seu executável personalizado para um ficheiro

se quiser verificar este trabalho, pode executar o seguinte no PowerShell – primeiro sai “Hello World” e depois simplesmente redirecciona-o para a saída do ficheiro.txt:

echo “Hello World” >output.txt 2>&1.\i>p>O segundo comando deve abrir output.txt no editor de texto – e deve conter “Hello World”.

Nestes exemplos, os seguintes parâmetros afectam o resultado:

Element Description
Operador de redirecção: > Escreve o comando de saída para um ficheiro ou dispositivo, como uma impressora, em vez da janela de Prompt de Comando.
2>&1 Estes parâmetros fazem com que este comando primeiro redireccione stdout (Standard Output Stream) para o ficheiro de saída, e depois redireccione stderr (Standard Error Stream) para lá também.
Para uma lista mais completa dos diferentes operadores disponíveis, ver aqui.

Okay – por isso agora está finalmente documentado. Talvez não tenha de procurar no Google da próxima vez 🙂

Espera… Mas como é que isto é melhor do que copiar a partir de uma janela de consola?

Se não estiver a executar a sua aplicação sem supervisão, pode simplesmente executar a aplicação e copiar-colar da janela para o local da sua preferência. Isso é agradável e fácil! Então o que torna este método melhor?

Um par de coisas que lhe vêm à cabeça:

Porque é que a saída da consola para um ficheiro é melhor do que apenas copipasting

  1. Pode obter as transcrições sem supervisão. Não tem de fazer nada sozinho.
  2. Desta forma, não vai estragar a cópia seleccionando de áreas da saída.
      li>Não sei quanto a si, mas muitas vezes estrago a cópia colada a partir de uma consola ou janela PowerShell. Este método torna isso impossível.
  3. Esta é a forma mais fácil que encontrei de pedir a outras pessoas toda a saída/transcrição de uma aplicação de consola executada.
      Isso é realmente útil, porque quando estou a depurar, quero realmente todo o registo, e não apenas as últimas linhas de texto vermelho!

Mais pensamentos

Para mais informações e opções sobre os cenários de saída, ver este tópico Stack Overflow. Se quiser ler mais sobre stdout e stderr, veja isto.

E para mais referências, aqui está uma lista de todos os operadores de redireccionamento suportados para versões razoavelmente recentes da PowerShell (provavelmente válida para PowerShell >5.1):

>th>What’s it do?

>>>

Redirecção
>> Enviar saída para o ficheiro especificado
Aplica a saída ao conteúdo do ficheiro especificado
2> Enviar erros para o ficheiro especificado.
2>> Aplica os erros ao conteúdo do ficheiro
especificado file
2>&1 Enviar erros e resultados de sucesso para a
fluxo de saída de successo
3> Enviar avisos para o ficheiro especificado
3>> Aplica avisos ao conteúdo do ficheiro
especificado.
3>&1 Enviar avisos e saída de sucesso para o fluxo de saída de sucesso
4> Enviar saída verbosa para o ficheiro especificado
4>> Aplicações saída verbosa para o conteúdo de
o ficheiro especificado
4>&1 Enviar saída verbosa e sucesso de saída para
o fluxo de saída de sucesso
5> Enviar mensagens de depuração para o ficheiro especificado
5>> Aplica mensagens de depuração ao conteúdo de
o ficheiro especificado
5>&1 Enviar mensagens de depuração e saída de sucesso para
o fluxo de saída de sucesso
6> Enviar informações mensagens para um especificado
file
6>> Aplica mensagens informativas ao
contentes de um ficheiro especificado
6>&1 Enviar mensagens informativas e sucesso
output para o fluxo de saída de sucesso.
*> Enviar todos os tipos de saída para o ficheiro especificado
**>> Aplica todos os tipos de saída ao conteúdo de
o ficheiro especificado
**>&1 Enviar todos os tipos de saída para a saída de sucesso
stream
Source (applied)

No entanto, um cenário muito mais avançado seria salvar a saída directamente para Application Insights ou algo semelhante. Para muitos casos, isto seria como disparar uma mosca com uma bazuca, mas para implantações maiores, porque não? Talvez valha a pena um post no blog mais tarde!

  • Autor
  • Posts recentes
mm

Developer / Speaker / Consultant at Koskila / Valo Solutions Ltd. / Norppandalotti Software Co / Alter – Experience Ideas Ltd.
Antti Koskela é uma orgulhosa desenvolvedora nómada nativa digital milenar de full stack (será que já chega de “buzzwords” engraçados? É definitivamente suficiente “buzzwords” engraçados!), que trabalha como Arquitecto de Soluções para a Intranet da Valo, o produto que o fará apaixonar-se pela sua intranet.
Ele é desenvolvedor desde 2004 (começando com PHP e Java), e tem dobrado e torcido SharePoint em diferentes formas desde MOSS. Hoje em dia ele não só está a trabalhar no SharePoint, mas também em projectos .NET, Azure, Office 365 e muitas outras coisas. Ele também é o Microsoft MVP para o desenvolvimento do Office.
Este é o seu blog pessoal profissional (por exemplo, profissional, mas definitivamente pessoal).

mm
=”https:>=”https:>
Postais mais recentes de Antti K. Koskela (ver todos)
  • Guia: Como tomar conta e matar um inquilino AAD viral? – 24 de Março de 2021
  • Como listar todas as assembleias carregadas numa sessão PowerShell? – 18 de Março de 2021
  • Of Course I Still #ValoLove You – 15 de Março, 2021

52votos
Avaliação de artigos

/div>

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *