Установите для последнего результата запланированного задания значение 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
Другие вопросы по тегам