Задать последний результат запланированной задачи 0x0 вручную

каждую ночь запускается задача, которая проверяет, есть ли у какой-либо запланированной задачи последний результат, не равный 0x0. Если в запланированных задачах есть ошибка 0x1, то мне автоматически отправляется электронное письмо. Поскольку некоторые задачи выполняются только еженедельно, а иногда возникает ошибка, результатом которой является не 0x0, каждую ночь отправляется электронное письмо с сообщением об ошибке, так как последний столбец результатов по-прежнему показывает последний результат 0x1. Но я хотел бы установить последний столбец результата в 0x0 вручную, если бы я решил проблема, поэтому я не буду получать каждую ночь по электронной почте с сообщением об ошибке.

так можно ли вручную (или скриптом) задать для запланированных задач последний результат 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%"
)
3
задан Rogier
01.04.2023 8:12 Количество просмотров материала 2750
Распечатать страницу

2 ответа

вот решение вашей проблемы, хотя это не ответ на ваш вопрос.  Вы хотите видеть только задачи вот и побежал сегодня и имеют ненулевой статус, верно?

На Windows 7, schtasks /query сообщает даты в формате n/n/nnnn (без ведущих нулей), а date команда использует nn/nn / nnnnn (с ведущими нулями).  Итак, чтобы получить сегодняшнюю дату в формате n/n/nnnn, я бы сделал

set today_temp1=/%date:~4%
set today_temp2=%today_temp1:/0=/%
set today=%today_temp2:~1%

If schtasks и date совместимы на XP, то вы можете откажитесь от всего вышесказанного.  Если вы знаете более чистый путь обнажать ведущие нули с дат, то пожалуйста скажите мне.

изменить findstr to findstr "TaskName Last", таким образом, вы получаете TaskName, время последнего выполнения, и последний результат.  И измените свой Sub to:

:Sub
set Line=%*
set BOL=%Line:~0,8%
set MOL=%Line:~38%
if /i "%BOL%"=="TaskName" (
    set name=%MOL%
    goto :eof
)
if /i "%BOL%"=="Last Run" (
    REM Break date and time apart.
    call :Sub2 %MOL%
    goto :eof
)
set result=%MOL%
echo Task Name=%name%, Last Run=%lastrun%, Task Result=%result%
if not %result%==0 (
    if %lastrun%==%today% (
        ︙

goto :eof


:Sub2
set lastrun=%1
REM The Last Run time is %2.
goto :eof
3
отвечен Scott 2023-04-02 16:00

вот решение вашей проблемы, хотя это не ответ на ваш вопрос.  Вы хотите видеть только задачи, которые выполнялись и не выполнялись С тех пор, как в последний раз вы смотрели, да?  Таким образом, вести журнал, какие сбои задачи были зарегистрированы.

создать пустые файлы 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
0
отвечен Scott 2023-04-02 18:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх