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


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

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

7 62

7 ответов:

вы можете иметь отладку.cmd, который вызывает yourscript.cmd

yourscript.cmd > logall.txt

расписание отладки.cmd вместо yourscript.cmd

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

cmd /c yourscript.cmd > logall.txt

С stderr (где большинство ошибок идут к):

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

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

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

чтобы дополнить ответ @user2744787, вот скриншот, чтобы показать, как использовать cmd с аргументами в запланированной задачи:

enter image description here

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

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

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

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

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

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

имейте в виду, что 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 AM, приведенная выше командная строка будет производить следующее:

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