web-dev-qa-db-fra.com

Comment capturer la sortie d'un script s'il est exécuté par le planificateur de tâches?

Sous Windows Server 2008, comment puis-je capturer la sortie d'un script exécuté avec le planificateur de tâches Windows?

Je teste un script batch d'impression personnalisée assez long et, aux fins de débogage, j'aimerais voir toutes les sorties tous les soirs.

76
Mechaflash

Essayez ceci comme chaîne de commande dans le Planificateur de tâches:

cmd /c yourscript.cmd > logall.txt
70
user2744787

Avec stderr (où se trouvent la plupart des erreurs):

cmd /c yourscript.cmd > logall.txt 2>&1
49
Ivan

Pour compléter la réponse de @ user2744787, voici une capture d'écran montrant comment utiliser cmd avec des arguments dans une tâche planifiée:

enter image description here

38
kevinarpe

Vous pouvez avoir un debug.cmd qui appelle yourscript.cmd

yourscript.cmd > logall.txt

vous planifiez debug.cmd au lieu de yourscript.cmd

37
rene

Le >> ajoutera le fichier journal plutôt que de l'écraser à chaque fois. Le 2>&1 enverra également des erreurs à votre fichier journal.

cmd /c YourProgram.exe >> log.txt 2>&1
35

Vous pouvez écrire dans un fichier journal sur les lignes que vous souhaitez générer comme ceci:

@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt

De cette façon, vous pouvez choisir les commandes à sortir si vous ne voulez pas tout parcourir, mais obtenez ce que vous voulez voir. Le > le sortira dans le fichier spécifié (créant le fichier s’il n’existe pas et le réécrivant s’il existe). Le >> va être ajouté au fichier spécifié (création du fichier s’il n’existe pas, ajout au contenu s’il existe).

9
Bali C

Utilisez le cmd.exe processeur de commandes pour créer un nom de fichier horodaté afin de consigner le résultat de votre tâche planifiée

Pour vous appuyer sur les réponses d’autres personnes ici, il se peut que vous souhaitiez créer un fichier de sortie dont la date et/ou l’heure sont intégrées au nom du fichier. Vous pouvez utiliser le cmd.exe processeur de commande pour le faire pour vous.

Remarque: Cette technique extrait la chaîne des variables internes de l’environnement Windows et la découpe en fonction de la position des caractères. De ce fait, les valeurs exactes fournies dans les exemples ci-dessous peuvent ne pas être correctes pour la région de Windows que vous utilisez. De plus, avec certains paramètres régionaux, certains composants de la date ou de l'heure peuvent introduire un espace dans le nom de fichier construit lorsque leur valeur est inférieure à 10. Pour atténuer ce problème, entourez votre nom de fichier de guillemets afin que tout espace non intentionnel du fichier name ne casse pas la ligne de commande que vous construisez. Expérimentez et trouvez ce qui fonctionne le mieux pour votre situation.

Sachez que PowerShell est plus puissant que cmd.exe. L’un des avantages de cette solution est qu’il peut gérer différentes régions Windows. Mais cette réponse concerne la résolution de ce problème en utilisant cmd.exe, pas PowerShell, alors nous continuons.

En utilisant cmd.exe

Vous pouvez accéder à différents composants de la date et de l’heure en découpant les variables d’environnement interne %date% et %time%, comme suit (encore une fois, les valeurs de découpage exactes dépendent de la région configurée dans Windows):

  • Année (4 chiffres): %date:~10,4%
  • Mois (2 chiffres): %date:~4,2%
  • Jour (2 chiffres): %date:~7,2%
  • Heure (2 chiffres): %time:~0,2%
  • Minute (2 chiffres): %time:~3,2%
  • Deuxième (2 chiffres): %time:~6,2%

Supposons que vous souhaitiez que votre fichier journal soit nommé en utilisant le format de date/heure suivant: "Log_[yyyyMMdd]_[hhmmss].txt ". Vous utiliseriez ce qui suit:

Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt

Pour tester cela, exécutez la ligne de commande suivante:

cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"

En résumé, pour rediriger stdout et stderr de votre script vers un fichier journal portant le nom de la date et l'heure actuelles, use peut utiliser les éléments suivants comme ligne de commande:

cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1

Notez que l'utilisation de guillemets autour du nom de fichier pour gérer les occurrences d'un composant de date ou d'heure peut introduire un caractère d'espacement.

Dans mon cas, si la date et l'heure actuelles étaient le 10/05/2017 à 9:05:34, la ligne de commande ci-dessus produirait les éléments suivants:

cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1
8
STLDev