为每个Windows事件日志编写文本文件

时间:2019-02-14 09:13:53

标签: windows batch-file event-log

我正在尝试为ID为4663的每个事件编写一个文本文件,因此我从事件日志中安排了一个任务,该任务运行带有参数4663的批处理文件。这是我的.bat:

@echo off
IF /I "%1" EQU "4659" set ACTION=Lan Delete
IF /I "%1" EQU "4660" set ACTION=Local Delete
IF /I "%1" EQU "4663" set ACTION=Evento Object
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "Mil=%dt:~15,3%"
set TIMESTAMP=%YYYY%%MM%%DD%%HH%%Min%%Sec%%Mil%
set HOLDER="C:\log\Evt%1_%TIMESTAMP%.txt"
set LOGFILE="C:\log\logEvents.txt"
type nul > %HOLDER%
wevtutil qe security /rd:true /q:"*[System/EventID=%1]" /f:text /c:1 > %HOLDER%
for /f "tokens=3" %%a in ('type %HOLDER% ^| find /i "Account Name"') do set accname=%%a
for /f "tokens=3" %%a in ('type %HOLDER% ^| find /i "Event ID"') do set eventid=%%a
for /f "tokens=2" %%a in ('type %HOLDER% ^| find /i "Date"') do set dt=%%a
set HEADER=%eventid%: %accname% / %ACTION% @ TS: %dt%
echo %HEADER%
echo %HEADER% >> %LOGFILE%

此脚本可以正确地生成通用日志文件,并使用时间戳为每个事件生成一个文件,以确保您不会错过任何事件。

例如,复制文件时,它将生成两个4663事件,一个事件用于“ WriteData”,另一个事件用于“ AppendData”。

不幸的是,两个文件的查询结果是相同的,它总是采用找到的第一个4663事件。

更糟糕的是,如果我尝试复制3个文件,我会发现6个事件4663,但所有事件都指向第一个文件的数据。

相反,如果我一次复制一个文件,则至少双精度引用是指单个文件。

我唯一可以确定的是,对于每个事件4663,我都会创建一个文本文件,以便按计划执行批处理。

我认为这是查询的问题,因为如果我尝试从cmd运行它,它只会给我一个与事件日志的第一个事件4663相对应的结果。 我不知道在事件调度期间是否可以将事件的ID句柄作为.bat任务的参数传递。

为了安全起见,我必须在事件注册后立即对其进行恢复,因为它可能以某种方式破坏PC,甚至在我可以检查之前删除安全事件日志。

有什么主意吗?

0 个答案:

没有答案