Configure o último resultado da tarefa agendada para 0x0 manualmente

1

Toda noite é executada uma tarefa que verifica se alguma tarefa agendada tem um Último resultado não é igual a 0x0. Se uma tarefa agendada tiver um erro como 0x1, automaticamente um e-mail será enviado para mim. Como algumas tarefas são executadas apenas semanalmente, e às vezes ocorre um erro que resulta em não igual a 0x0, toda noite um email é enviado com a mensagem de erro, pois a coluna Último resultado ainda mostra o último resultado de 0x1. Mas eu gostaria de definir a coluna Último resultado como 0x0 manualmente se eu resolvi um problema, então não receberei todas as noites um e-mail com a mensagem de erro.

Então é possível definir as tarefas agendadas Último resultado para 0x0 manualmente (ou por um script)?

@harrymc. Veja o script localizado embaixo que está enviando o e-mail. Eu posso facilmente adicionar um critério para ignorar o resultado 0x1 (ou outro código), no entanto, esta não é a solução, já que na maioria das vezes esse resultado é um erro real e tem que ser enviado por e-mail.

set [email protected]
set SMTPServer=SMTPserver
set PathToScript=c:\scripts
set [email protected]

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%"
)
    
por Rogier 25.06.2012 / 12:06

2 respostas

3

Esta é uma solução para seu problema, embora não seja uma resposta para sua pergunta. Você deseja ver apenas as tarefas que foram executadas hoje e que tenham um status diferente de zero, certo?

No Windows 7, schtasks /query informa as datas no formato n / n / nnnn (sem zeros à esquerda), enquanto o comando date usa nn / nn / nnnn (com zeros à esquerda). Então, para obter a data de hoje no formato n / n / nnnn, eu faria

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

Se schtasks e date forem compatíveis no XP, você poderá abrir mão do acima. Se você conhece uma maneira mais clara de tirar as datas iniciais dos zeros, por favor, me avise.

Em seguida, altere seu findstr para findstr "TaskName Last" , para que você obtenha TaskName, Last Run Time e Last Result. E mude seu Sub para:

: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
    
por 03.10.2012 / 22:55
0

Esta é uma solução para seu problema, embora não seja uma resposta para sua pergunta. Você quer ver apenas as tarefas que foram executadas e falharam desde a última vez que você olhou , certo? Portanto, mantenha um registro de quais falhas de tarefas foram relatadas.

Crie arquivos vazios reported0.txt e reported0.txt . (Obviamente, você pode mudar os nomes se quiser.)

set YourEmailAddress, SMTPServer, PathToScript, and FromAddress as appropriate.

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
Break date and time apart if you want.
        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.
                ︙           (
Report task failure via email.)
        )
        echo %pattern_string% >> reported1.txt
)
exit /b
    
por 16.10.2012 / 00:08