Comment capturer la sortie d'un script s'il est exécuté par le planificateur de tâches?
En utilisant 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 d'impression par lots personnalisé assez long, et à des fins de débogage, j'aimerais voir toute la sortie de celui-ci tous les soirs.
7 réponses
, Vous pouvez avoir un débogage.cmd qui appelle yourscript.cmd
yourscript.cmd > logall.txt
Vous planifiez le débogage.cmd au lieu de yourscript.cmd
Essayez ceci en tant que chaîne de commande dans le planificateur de tâches:
cmd /c yourscript.cmd > logall.txt
Avec stderr (où la plupart des erreurs vont):
cmd /c yourscript.cmd > logall.txt 2>&1
Le >>
ajouter le fichier journal, plutôt que de l'écraser à chaque fois. Le 2>&1
enverra également des erreurs dans votre fichier journal.
cmd /c YourProgram.exe >> log.txt 2>&1
Pour compléter la réponse de @user2744787, voici une capture d'écran pour montrer comment utiliser cmd
avec des arguments dans une tâche planifiée:
Vous pouvez écrire dans un fichier journal sur les lignes que vous souhaitez afficher 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 à afficher si vous ne voulez pas tout parcourir, obtenez simplement ce que vous devez voir. Le >
Le produira dans le fichier spécifié (en créant le fichier s'il n'existe pas et en l'écrasant si c'est le cas). Le {[2] } ajoutera au fichier spécifié (en créant le fichier s'il n'existe pas mais en ajoutant au contenu si c'est le cas).
Utilisez le processeur de commande cmd.exe
pour créer un nom de fichier horodaté pour enregistrer la sortie de votre tâche planifiée
Pour construire sur les réponses des autres ici, il se peut que vous souhaitiez créer un fichier de sortie qui a la date et/ou l'heure intégrées dans le nom du fichier. Vous pouvez utiliser le processeur de commande cmd.exe
pour le faire pour vous.
Note: cette technique prend la sortie de chaîne des variables d'environnement Windows internes et les découpe en fonction de la position des caractères. Pour cette raison, les valeurs exactes fournies dans les exemples ci-dessous peuvent ne pas être correctes pour la région de Windows que vous utilisez. En outre, 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 les espaces non désirés dans le nom de fichier ne cassent 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
. Une façon, il est plus puissant est qu'il peut traiter avec différentes régions de Windows. Mais cette réponse consiste à résoudre ce problème en utilisant cmd.exe
, Pas PowerShell
, donc nous continuons.
À l'Aide de cmd.exe
Vous pouvez accéder à différents composants de la date et de l'heure en découpant Les variables d'environnement internes %date%
et %time%
, comme suit (encore une fois, les valeurs de découpage exactes dépendent de la région configuré 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%
- Minutes (2 chiffres):
%time:~3,2%
- Deuxième (2 chiffres):
%time:~6,2%
Supposons que vous souhaitiez que votre fichier journal soit nommé en utilisant ce format de date / heure: "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"
Tout mettre ensemble, pour rediriger stdout
et stderr
de votre script vers un fichier journal nommé avec la date et l'heure actuelles, use peut utiliser la ligne de commande suivante:
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
Remarque l'utilisation de guillemets autour du nom de fichier pour gérer les instances un composant date ou heure peut introduire un caractère d'espace.
Dans mon cas, si la date/heure actuelle était 10/05/2017 9: 05: 34 AM, la ligne de commande ci-dessus produirait ce qui suit:
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1