Как мне захватить выходные данные скрипта, если он запускается планировщиком задач? - PullRequest
75 голосов
/ 29 декабря 2011

Как использовать Windows Server 2008 для захвата выходных данных сценария, который запускается с помощью планировщика задач Windows?

Я тестирую довольно длинный пользовательский пакетный скрипт печати, и в целях отладки я бы хотел видеть все выходные данные из него каждую ночь.

Ответы [ 7 ]

69 голосов
/ 04 сентября 2013

Попробуйте это как командную строку в планировщике задач:

cmd /c yourscript.cmd > logall.txt
46 голосов
/ 22 мая 2014

С помощью stderr (куда попадает большинство ошибок):

cmd /c yourscript.cmd > logall.txt 2>&1
37 голосов
/ 23 марта 2017

В дополнение к ответу @ user2744787, на следующем снимке экрана показано, как использовать cmd с аргументами в запланированной задаче:

enter image description here

37 голосов
/ 29 декабря 2011

У вас может быть файл debug.cmd, который вызывает yourscript.cmd

yourscript.cmd > logall.txt

вы планируете debug.cmd вместо yourscript.cmd

34 голосов
/ 25 мая 2016

>> будет добавлять файл журнала, а не перезаписывать его каждый раз. 2>&1 также отправит ошибки в ваш файл журнала.

cmd /c YourProgram.exe >> log.txt 2>&1
8 голосов
/ 22 августа 2017

Используйте командный процессор cmd.exe для создания имени файла с меткой времени для записи результатов запланированной задачи

Чтобы опираться на ответы других здесь, возможно, вы захотите создать выходной файл, в котором дата и / или время встроены в имя файла. Для этого вы можете использовать командный процессор cmd.exe.

Примечание: Этот метод берет строковый вывод внутренних переменных среды Windows и разбивает их на части в зависимости от положения символа. Из-за этого точные значения, указанные в примерах ниже, могут быть неверными для региона Windows, который вы используете. Кроме того, с некоторыми региональными настройками некоторые компоненты даты или времени могут вводить пробел в имя созданного файла, если их значение меньше 10. Чтобы смягчить эту проблему, заключите имя файла в кавычки, чтобы любые непреднамеренные пробелы в файле name не нарушает создаваемую вами командную строку Поэкспериментируйте и найдите то, что лучше всего подходит для вашей ситуации.

Имейте в виду, что PowerShell более мощный, чем cmd.exe. Один из способов сделать его более мощным состоит в том, что он может работать с различными регионами Windows. Но этот ответ касается решения этой проблемы с использованием cmd.exe, а не PowerShell, поэтому мы продолжим.

Использование cmd.exe

Доступ к различным компонентам даты и времени можно получить с помощью среза внутренних переменных среды %date% и %time% следующим образом (опять же, точные значения среза зависят от региона, настроенного в Windows ):

  • Год (4 цифры): %date:~10,4%
  • Месяц (2 цифры): %date:~4,2%
  • день (2 цифры): %date:~7,2%
  • час (2 цифры): %time:~0,2%
  • Минута (2 цифры): %time:~3,2%
  • Второй (2 цифры): %time:~6,2%

Предположим, вы хотите, чтобы ваш файл журнала был назван в следующем формате даты / времени: "Log_[yyyyMMdd]_[hhmmss].txt". Вы бы использовали следующее:

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

Чтобы проверить это, запустите следующую командную строку:

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

Собрав все это вместе, чтобы перенаправить как stdout, так и stderr из вашего скрипта в файл журнала с текущими датой и временем, используйте в качестве командной строки следующее:

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

Обратите внимание на использование кавычек вокруг имени файла для обработки случаев, когда компонент даты или времени может вводить пробел.

В моем случае, если бы текущие дата / время были 10.05.2017, 9:05:34, вышеприведенная командная строка выдала бы следующее:

cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1
8 голосов
/ 29 декабря 2011

Вы можете записать в файл журнала строки, которые вы хотите вывести, следующим образом:

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

Таким образом, вы можете выбрать, какие команды выводить, если вы не хотите проходить через все, просто получите то, что вам нужно увидеть. > выведет его в указанный файл (создавая файл, если он не существует, и перезаписывая его, если он существует). >> добавится к указанному файлу (создает файл, если он не существует, но добавляет к содержимому, если он существует).

...