Доброго времени суток.
Хочу написать батник, который на входе принимает имя источника и код события. На выходе нужно получить - errorlevel =0 если событие не найдено, 1 - если найдено. И хочется прикрутить возможность получения кол-ва событий.
События из журнала System, например.
Запрос wevtutil сделаю сам, а как принимать входные параметры не знаю =/
С другой стороны, использование powershell, имхо, выглядит несколько более удобным.
как пример :
$events=get-eventlog system | where {$_.EventId -eq "6013"}
Количество найденных событий:
$events.Count
Доступ к любому событию (в том числе и текст сообщения) :
$Events[номер]
@echo off
chcp 1251>nul
set /p x="Источник: "
set /p y="Номер события: "
C:\Windows\System32\wevtutil.exe qe System /count:5 /rd:true /f:text /q:"*[System[Provider[@Name='%x%'] and (EventID=%y%)]]" > C:\1.txt
Anton: Почему не работает конструкция
@echo off
chcp 1251>nul
set /p z="Журнал (System, Application, Security, etc):
set /p x="Источник: "
set /p y="id: "
%windir%\system32\wevtutil.exe qe %z% /rd:true /f:text /q:"*[%z%[Provider[@Name='%x%'] and (EventID=%y%)]]"
IF %errorlevel% GTR 0 Echo Ошибка найдена
IF %errorlevel% LSS 0 Echo Ошибка найдена
IF %errorlevel% EQU 0 Echo Ошибок нет
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
chcp 1251 >nul
set r=%1
set u=%2
set p=%3
set x=%4
set y=%5
set z=%6
FOR /F "usebackq delims=" %%i IN ('%windir%\system32\wevtutil.exe qe /r:%r% /u:%u% /p:%p% %x% /rd:true /f:text /q:"*[%x%[Provider[@Name='%y%'] and ^(EventID=%z%^)]]" ^| find /c "%z%"') do set "cnt=%%~i"
if errorlevel 0 set err=1
if errorlevel 1 set err=0
echo %err%
echo %cnt%