我有一个用于将事件日志保存到共享驱动器的批处理文件。我想在 XP 和 Server 2003 上轻松完成此操作。由于 Wevtutil 仅适用于 Vista 及更高版本,我可以使用什么?
rem Script start here
rem Timestamp Generator
set BACKUP_PATH=\\shared-drive\it\Temp\Event-Logs\
rem Parse the date (e.g., Thu 02/28/2013)
set cur_yyyy=%date:~10,4%
set cur_mm=%date:~4,2%
set cur_dd=%date:~7,2%
rem Parse the time (e.g., 11:20:56.39)
set cur_hh=%time:~0,2%
if %cur_hh% lss 10 (set cur_hh=0%time:~1,1%)
set cur_nn=%time:~3,2%
set cur_ss=%time:~6,2%
set cur_ms=%time:~9,2%
rem Set the timestamp format
set timestamp=%cur_yyyy%%cur_mm%%cur_dd%-%cur_hh%%cur_nn%%cur_ss%%cur_ms%
rem Set the computername format
set servname=%computername%
wevtutil epl System %BACKUP_PATH%\%servname%_%timestamp%_system.evtx
wevtutil epl Application %BACKUP_PATH%\%servname%_%timestamp%_application.evtx
wevtutil epl Security %BACKUP_PATH%\%servname%_%timestamp%_security.evtx
rem End of Script
答案1
使用 Logevent.exe:
logevent "This is a test"
logevent -m \\server1 -s W -c 100 -r "my batch program" -e 88 "batch program failed!"
在 Windows 2003、XP 和 Win2K 中,您可以通过两种方式创建、管理和报告 ETW 会话:您可以使用 Microsoft 管理控制台 (MMC) 性能日志和警报管理单元,也可以使用命令行实用程序。在 Windows 2003 和 XP 中,操作系统包含命令行实用程序。在 Win2K 中,命令行实用程序是 Microsoft Windows 2000 Server 资源工具包的一部分,与 Windows 2003 和 XP 中的命令行实用程序略有不同。在 ETW 体系结构的上下文中,性能日志和警报管理单元和一些命令行实用程序是控制器应用程序。其他命令行实用程序提供消费者应用程序功能。
使用下列工具之一进行跟踪日志记录:
logman
tracelog
参考
答案2
我不认为您要求的可以直接完成。我能想到的最接近的方法是使用 wmic 转储记录。这种方法在 Windows 7 中对我来说并不可靠,但在 Windows XP 下似乎有效。
示例片段:
Rem The first time that WMIC runs, it may output "Please wait while WMIC is being installed." followed by the unicode answer.
Rem cmd /a /c does not work correctly with a mix of single and double byte chars in the file. So run first command twice (or ignore the problem).
wmic os get lastbootuptime > %LogFileJunk%
wmic os get lastbootuptime > %LogFileJunk%
Rem Following call can be followed by SQL-like filters such as: GET * /format:csv OR GET TimeGenerated,User /format:csv
wmic NTEVENT WHERE "LogFile='security' AND TimeGenerated > %Recent%" list /format:htable > %LogFileJunk% 2>nul
dir %LogFileJunk% > NUL
for %%c in (%LogFileJunk%) do if %%~zc GTR 2 GOTO GotLog1
Echo !!!Unable to retrieve!!! >> %LogFileTmp%
GOTO DoneLog1
:GotLog1
cmd /a /c type %LogFileJunk% >> %LogFileTmp%
请注意 wmic 的解决方法:
- 运行两次,以防第一次出现有用的(ANSI)消息
- 检查以确保创建了一个真实文件(> 2 个字符)
- 就我而言,我需要从 unicode 转换为 ANSI(“type”命令)