我已经提出了一个将重新启动特定服务的脚本,现在我想知道是否有一种方法可以使用批处理文件从事件查看器获取服务启动时间。
感谢是否有人能给我答案。谢谢!
答案 0 :(得分:1)
使用wevtutil。
服务启动/停止事件记录在系统事件日志中,有几种方法可以打开它(使用谷歌)。单击事件,我们可以看到"服务进入运行状态" ID为7036的活动,请使用它来查找Application Experience
服务的最后开始时间。
只需要一个事件/c:1
,因为它是日志中的最后一个,所以 r 反转 d /rd:true
:
wevtutil qe system /rd:true /c:1 /q:"Event[EventData[Data[@Name='param1']='Application Experience'] and System[EventID=7036]]
输出是这个xml blob:
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'><System><Provider Name='Service Control Manager' Guid='{555908d1-a6d7-4695-8e1e-26931d2012f4}' EventSourceName='Service Control Manager'/><EventID Qualifiers='16384'>7036</EventID><Version>0</Version><Level>4</Level><Task>0</Task><Opcode>0</Opcode><Keywords>0x8080000000000000</Keywords><TimeCreated SystemTime='2015-10-12T10:43:13.841899000Z'/><EventRecordID>4287264</EventRecordID><Correlation/><Execution ProcessID='800' ThreadID='1804'/><Channel>System</Channel><Computer>zOo</Computer><Security/></System><EventData><Data Name='param1'>Application Experience</Data><Data Name='param2'>running</Data><Binary>410065004C006F006F006B00750070005300760063002F0034000000</Binary></EventData></Event>
让我们提取日期和时间。
首先使用字符串替换SystemTime=
删除从开头到set "xml=!xml:*SystemTime=!"
的所有内容:
=&#39; 2015-10-12T10:43:13.841899000Z&#39; /&GT; .......................... ...........(字符串的其余部分)
然后将'
和T
以及.
分成代币:=
,2015-10-12
,10:43:13
,841899000Z
, />....
并抓住第二和第三名:
@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%a in ('
wevtutil qe system /rd:true /c:1 ^
/q:"Event[EventData[Data[@Name='param1']='Application Experience'] and System[EventID=7036]]"
') do (
set "xml=%%a" & set "xml=!xml:*SystemTime=!"
for /f "delims='T. tokens=2,3" %%b in ("!xml!") do (
echo Started at date: %%b time: %%c
)
)
endlocal
pause
日期使用YYYY-MM-DD格式,时间为24小时:
日期:2015-10-12时间:10:43:13