Cet article a été mis à jour le 7 décembre 2020.

4 min de lecture.

De temps en temps, vous rencontrez une situation, où vous aurez besoin d’une manière ou d’une autre de vider la sortie de la console (ou la transcription) de l’exécution d’une application console. Je vais en fait soutenir que cela arrive beaucoup plus souvent qu’on ne le pense – dans mon cas, chaque fois qu’un client a besoin d’un webjob ou d’une fonction, que l’on déploie normalement sur Azure, étant exécuté sur les serveurs du client. Ce post décrit comment faire cela.

Problème

Table des matières

Quelque chose se casse ou l’app se plante, et l’erreur est enregistrée dans le journal des événements… Mais juste l’erreur, pas toute la transcription. Vous aimeriez tout obtenir, pour comprendre ce qui se passe réellement, mais le journal des événements n’est pas la voie à suivre.

Ou encore, vous enquêtez peut-être sur une erreur qui est arrivée à quelqu’un d’autre, mais vous n’obtenez que des captures d’écran des erreurs de la console ou du journal des événements, alors que vous voudriez plutôt obtenir toutes les informations possibles sur le problème.

Que faire ?

Solution : l’opérateur de redirection > à la rescousse !

C’est heureusement assez facile. Il existe de multiples façons de canaliser, de déverser, de rediriger, de consigner, de mettre en miroir ou simplement de sauvegarder la sortie vers presque tous les supports cibles imaginables, mais comme je déteste toujours les chercher sur Google (et que, pour ma part, je ne semble pas pouvoir m’en souvenir par cœur), je documente ici ma méthode préférée.

Pas besoin de pipeer la sortie vers le fichier – parce que la redirection fait nativement ce que vous pourriez faire avec un pipe et « Out-File -FilePath » ou une commande similaire.

Comment rediriger la sortie vers le fichier dans Powershell ?

Vous pouvez diriger toute la sortie de la console (et donc toute la transcription PowerShell de votre exécutable) vers un fichier texte en faisant quelque chose comme ceci :

executable.exe > sortie.txt 2>&1

OR

executable.exe *>&> sortie.txt

Cette méthode écrit simplement tout ce qui se trouve dans la fenêtre de la console dans un fichier – aussi simple que cela !

Comment rediriger la sortie console de votre exécutable personnalisé vers un fichier's console output to a file
Comment rediriger la sortie console de votre exécutable personnalisé vers un fichier

Et bien sûr, ce n’est pas seulement limité à Command Prompt (cmd.exe) – il fonctionne également dans Windows PowerShell :

Comment rediriger la sortie console PowerShell de votre exécutable personnalisé vers un fichier's PowerShell console output to a file
Comment . pour rediriger la sortie de la console PowerShell de votre exécutable personnalisé vers un fichier

Si vous voulez vérifier que cela fonctionne, vous pouvez exécuter ce qui suit dans PowerShell – il sort d’abord « Hello World », puis le redirige simplement vers la sortie du fichier.txt:

echo « Hello World » >output.txt 2>&1.\output.txt

La deuxième commande devrait ouvrir output.txt dans un éditeur de texte – et il devrait contenir « Hello World ».

Dans ces exemples, les paramètres suivants affectent le résultat :

Element Description
Opérateur de redirection : > Ecrit la sortie de la commande dans un fichier ou un périphérique, tel qu’une imprimante, au lieu de la fenêtre d’invite de commande.
2>&1 Ces paramètres font que cette commande redirige d’abord stdout (flux de sortie standard) vers le fichier de sortie, puis y redirige également stderr (flux d’erreur standard).
Pour une liste plus approfondie des différents opérateurs disponibles, voir ici.

Ok – donc maintenant c’est enfin documenté. Peut-être que je n’aurai pas à le googler la prochaine fois 🙂

Attendez… Mais en quoi est-ce mieux que de copier-coller depuis une fenêtre console ?

Si vous n’exécutez pas votre application sans surveillance, vous pourriez simplement exécuter l’application et copier-coller depuis la fenêtre à l’endroit de votre choix. C’est agréable et facile ! Alors qu’est-ce qui rend cette méthode meilleure ?

Une ou deux choses me viennent à l’esprit :

Pourquoi le vidage de la sortie de la console dans un fichier est meilleur que le simple copier-coller

  1. Vous pouvez obtenir les transcriptions sans surveillance. Vous n’avez pas à faire quoi que ce soit vous-même.
  2. De cette façon, vous ne gâcherez pas la copie en sélectionnant des zones de la sortie.
    • Je ne sais pas pour vous, mais je gâche souvent le copier-coller depuis une console ou une fenêtre PowerShell. Cette méthode rend cela impossible.
  3. C’est le moyen le plus simple que j’ai trouvé pour demander à d’autres personnes l’ensemble de la sortie/transcription d’une exécution d’application console.
    • C’est vraiment utile, parce que lorsque je débogue, je veux vraiment le journal entier, et pas seulement les dernières lignes de texte rouge !

Plus de réflexions

Pour plus d’infos et d’options sur les scénarios de sortie, voir ce fil de discussion Stack Overflow. Si vous voulez en savoir plus sur stdout et stderr, consultez ceci.

Et pour plus de référence, voici une liste de tous les opérateurs de redirection pris en charge pour les versions raisonnablement récentes de PowerShell (probablement valable pour PowerShell >5.1):

.

.

4>&1

.

.

Redirection Que fait-il ?
> Envoie la sortie vers le fichier spécifié
>

.>
Applique la sortie au contenu du
fichier spécifié
2> Envoie les erreurs au fichier spécifié.
2>> Applique les erreurs au contenu du
fichier spécifié. spécifié
2>&1 Envoie les erreurs et la sortie de succès au le
flux de sortie de succès
3> Envoie les avertissements dans le fichier spécifié
3>> Applique les avertissements au contenu du
fichier spécifié.
3>&1 Envoie les avertissements et la sortie de succès au
flux de sortie de succès
4> Envoie la sortie verbeuse dans le fichier spécifié
4>> Applique la la sortie verbeuse au contenu du
fichier spécifié
Envoie une sortie verbeuse et une sortie de succès vers
le flux de sortie de succès
5> Envoie les messages de débogage vers le fichier spécifié
5>> Applique les messages de débogage au contenu de
le fichier spécifié
5>

.&

1

Envoie les messages de débogage et la sortie de succès dans
le flux de sortie de succès
6> Envoie les messages d’information messages à un
fichier spécifié
6>> Applique des messages d’information au
contenu d’un
fichier spécifié
. fichier spécifié
6>&1 Envoie les messages d’information et la sortie de succès
au flux de sortie de succès.
> Envoie tous les types de sortie vers le fichier spécifié
iv
*.>>
Applique tous les types de sortie au contenu de
le fichier spécifié
*>&1 Envoie tous les types de sortie dans le flux de sortie
succès
Source (appliquée)

Cependant, un scénario beaucoup plus avancé serait d’enregistrer la sortie directement dans Application Insights ou quelque chose de similaire. Pour beaucoup de cas, cela reviendrait à tirer sur une mouche avec un bazooka, mais pour les déploiements plus importants, pourquoi pas. Cela vaudra peut-être un billet de blog plus tard !

  • Auteur
  • Messages récents
mm
Développeur / Conférencier / Consultant chez Koskila / Valo Solutions Ltd. / Norppandalotti Software Co / Alter – Experience Ideas Ltd.
Antti Koskela est un fier développeur full stack millénaire nomade digital native (est-ce assez de mots à la mode drôles ? C’est définitivement assez de mots à la mode drôles !), qui travaille comme architecte de solutions pour Valo Intranet, le produit qui vous fera tomber amoureux de votre intranet.
Il est développeur depuis 2004 (en commençant par PHP et Java), et il plie et tord SharePoint dans différentes formes depuis MOSS. Aujourd’hui, il ne travaille pas seulement sur SharePoint, mais aussi sur des projets .NET, Azure, Office 365 et bien d’autres choses. Il est également Microsoft MVP pour le développement d’Office.
Ce blog est son blog personnel professionnel (par exemple, professionnel, mais définitivement personnel).

mm
= »https:>= »https:>
Derniers messages de Antti K. Koskela (voir tous)
  • Guide : Comment prendre le contrôle et tuer un locataire viral de DAA ? – 24 mars 2021
  • Comment lister tous les assemblages chargés dans une session PowerShell ? – 18 mars 2021
  • Bien sûr que je t’aime toujours #ValoLove – 15 mars, 2021

52votes
Notation de l’article

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *