Установите для последнего результата запланированного задания значение 0x0 вручную
Каждую ночь запускается задача, которая проверяет, имеет ли какая-либо запланированная задача значение "Последний результат" не равно 0x0. Если в запланированных заданиях есть ошибка, например 0x1, мне автоматически отправляется электронное письмо. Поскольку некоторые задачи выполняются только еженедельно, и иногда возникает ошибка, которая не равна 0x0, каждую ночь отправляется электронное письмо с сообщением об ошибке, поскольку в столбце "Последний результат" все еще отображается последний результат 0x1. Но я бы хотел установить для столбца Last Result значение 0x0 вручную, если я решил проблему, поэтому я не буду каждый вечер получать электронное письмо с сообщением об ошибке.
Таким образом, можно ли установить для запланированных задач Last Result значение 0x0 вручную (или с помощью сценария)?
@harrymc. Посмотрите локализованный скрипт под отправкой электронной почты. Я могу легко добавить критерий, чтобы игнорировать результат 0x1 (или другой код), однако это не решение, поскольку в большинстве случаев этот результат является реальной ошибкой и должен быть отправлен по электронной почте.
set YourEmailAddress=to@email.com
set SMTPServer=SMTPserver
set PathToScript=c:\scripts
set FromAddress=from@email.com
for /F "delims=" %%a in ('schtasks /query /v /fo:list ^| findstr /i "Taskname Result"') do call :Sub %%a
goto :eof
:Sub
set Line=%*
set BOL=%Line:~0,4%
set MOL=%Line:~38%
if /i %BOL%==Task (
set name=%MOL%
goto :eof
)
set result=%MOL%
echo Task Name=%name%, Task Result=%result%
if not %result%==0 (
echo Task %name% failed with result %result% > %PathToScript%\taskcheckerlog.txt
bmail %PathToScript%\taskcheckerlog.txt -t %YourEmailAddress% -a "Warning! Failed %name% Scheduled Task on %computername%" -s %SMTPServer% -f %FromAddress% -b "Task %name% failed with result %result% on CorVu scheduler %computername%"
)
2 ответа
Вот решение вашей проблемы, хотя это не ответ на ваш вопрос. Вы хотите видеть только те задачи, которые выполнялись сегодня и имеют ненулевой статус, верно?
В Windows 7 schtasks /query
сообщает даты в формате n / n / nnnn (без начальных нулей), а date
Команда использует nn/nn/nnnn (с ведущими нулями). Итак, чтобы получить сегодняшнюю дату в формате n / n / nnnn, я бы сделал
установить today_temp1=/%date:~4% set today_temp2=%today_temp1:/0=/% установить сегодня =% сегодня_темп2:~1%
Если schtasks
а также date
совместимы на XP, тогда вы можете отказаться от вышеупомянутого. Если вы знаете более чистый способ убрать лидирующие нули с дат, пожалуйста, скажите мне.
Затем поменяй findstr
в findstr "TaskName Last"
, так что вы получите TaskName, Last Run Time и Last Result. И поменяй свой Sub
чтобы:
: Sub установить Line=%* установить BOL=%Line:~0,8% установить MOL=%Line:~38% if /i "%BOL%"=="TaskName" (имя набора =%MOL% goto:eof) if /i "%BOL%"=="Последний запуск" ( REM Перерыв даты и времени. вызов:Sub2 %MOL% goto:eof) установить результат =%MOL% echo Имя задачи =%name%, Last Run=%lastrun%, Результат задачи =% result% если нет% результат%==0 (если% lastrun% ==% сегодня% (︙ goto: eof : Sub2 установить lastrun=%1 REM Время последнего запуска%2. goto:eof
Вот решение вашей проблемы, хотя это не ответ на ваш вопрос. Вы хотите видеть только те задачи, которые были запущены и потерпели неудачу с момента последнего просмотра, верно? Таким образом, ведите журнал о том, какие сбои задач были зарегистрированы.
Создать пустые файлы reported0.txt
а также reported0.txt
, (Очевидно, вы можете изменить имена, если хотите.)
set YourEmailAddress
,SMTPServer
,PathToScript
, а такжеFromAddress
по мере необходимости.del reported0.txt > nul
Разбейте дату и время, если хотите.
ren reported1.txt reported0.txt > nul
for /F "delims=" %%a in ('schtasks /query /v /fo:list ^
^| findstr "TaskName Last"') do (
call :Sub %%a
)
exit /b
:Sub
set Line=%*
set BOL=%Line:~0,8%
set MOL=%Line:~38%
if "%BOL%"=="TaskName" (
set name=%MOL%
exit /b
)
if "%BOL%"=="Last Run" (
set run_date_time=%MOL%
REMСообщить об ошибке задачи по электронной почте.)
exit /b
)
set result=%MOL%
if not %result%==0 (
set pattern_string=@%name%@%run_date_time%@%result%@
find "%pattern_string%" reported0.txt > nul
if errorlevel 1 (
REM error => not found in file => not previously reported.
︙ (
)
echo %pattern_string% >> reported1.txt
)
exit /b