如何轻松查看Windows Server每次重新启动或关闭时的历史记录以及其原因(包括用户启动,系统启动和系统崩溃)?

Windows事件日志是一个明显的答案,但是我应该查看的事件的完整列表是什么?

我发现这些帖子部分地回答了我的问题:



Windows Server的上次重新启动时间包含一些可部分解决完整重新启动历史记录的答案

在Windows Server 2008 R2下查看关闭事件跟踪程序日志还包括一个附加事件id

计算机启动/启动时的事件日志时间包括一些相同的事件ID

,但这些事件ID不能涵盖所有情况AFAIK,因此信息难以理解因为它分布在多个答案中。

我有Windows Server的多个版本,因此至少适用于2008、2008 R2、2012和2012 R2版本的解决方案是理想的。

评论

在某些情况下,Nirsoft的TurnedOnTimesView可能足够好。 (nirsoft.net/utils/computer_turned_on_times.html),其中显示了重新启动和关闭时间。

您是否使用外部监控工具,例如opsview,nagios,icinga和shinken?这些工具将监视结果存储在数据库中,然后您可以检查服务器是否重新启动以及何时重新启动,

#1 楼

我能找到的最清晰,最简洁的答案是:


如何查看Windows中的PC启动和关闭历史记录

,其中列出了要监视的这些事件ID(引用但从文章编辑并重新格式化):



事件ID 6005(替代):“事件日志服务已启动。”这是系统启动的同义词。

事件ID 6006(备用):“事件日志服务已停止。”这是系统关闭的同义词。

事件ID 6008(备用):“先前的系统关闭是意外的。记录系统未正确关闭后启动的事件。

事件ID 6009(备用):指示Windows产品名称,版本,内部版本号,Service Pack编号和在引导时检测到的操作系统类型时间。
事件ID 6013:显示计算机的正常运行时间。没有该ID的TechNet页面。

我的OP中列出了一些服务器故障答案,还提供了以下内容:



事件ID 1074(备用):“由于以下原因,进程X代表用户Y启动了计算机的重启/关闭:”。指示应用程序或用户启动了重新启动或关闭。

事件ID 1076(备用):“用户X提供此计算机上次意外关闭的原因是:Y。记录第一个具有关闭权限的用户在意外重新启动或关闭后何时登录计算机,并提供发生这种情况的原因。
我错过了吗?

评论


为了区分由于检查错误而导致的掉电和重新启动,请查找事件ID 41(来源:Microsoft-Windows-Kernel-Power)和事件ID 1001 :(来源:BugCheck)的组合。前者不带后者则表示掉电或复位。

–sendmoreinfo
15年7月1日在20:16

这很有帮助。谢谢johnC。在“筛选器当前日志”窗口的“包含/排除事件ID”的输入字段中,我输入了“ 6005、6006、6008、6009、6013、1074、1076”,它恰好满足了我的需求。

– jbooker
16年8月23日在18:39

您可能应该添加带有事件ID 12的Kernel-General,它通常是重新启动/重置等后记录的第一个事件ID,并显示实际的“系统启动时间”,即:“操作系统在系统时间2017-上启动。 09-19T02:46:06.582794900Z。”

–阿贝尔
17年9月19日在14:45



我进行搜索但未能在事件日志代码中找到当前的Microsoft文档,因此我在Microsoft Docs github中创建了一个问题,以获取有关在新的MS docs体制github.com/MicrosoftDocs/windowsserverdocs/issues中何处恢复该内容的建议/共识。 / 444。 @ tim-schmelter请投票并添加您的想法。

– JohnC
18年8月8日在2:19

这是PowerShell的“单行代码”:Get-EventLog -LogName系统|? {$ _。EventID -in(6005,6006,6008,6009,1074,1076)} | ft TimeGenerated,EventId,Message -AutoSize -wrap

–user10082
19年8月7日在13:12



#2 楼

由于JohnC基本上已经涵盖了所有内容,所以我只想发表评论,但我尚未被允许这样做。

他描述的事件已经使用了相当长的一段时间,因此它们可以为您提到的任何OS以及其台式机兄弟。他链接到的事件ID页面(例如TechNet上的6006页面)提到Windows Server2003。

如果出现正常关机,用户启动或其他情况,您还应该看到一些事件ID 7036告诉您各种服务“已进入停止状态”。随着机器再次启动,您将看到更多7036s宣布服务正在进入运行状态。

评论


如果服务反复循环状态,您还将看到事件ID 7036的一大块,因此这不是查找重新启动的最佳方法。首先,您应该查找JohnC描述的事件。

– JTL
15年7月1日在15:01



#3 楼

以@JohnC的答案为基础并对其进行扩展

您可以使用XML过滤器,例如:

<QueryList>
<Query Id="0" Path="System">
<Select Path="Security">*[System[Provider[@Name='eventlog' or @Name='Microsoft-Windows-Eventlog'] and (EventID=1074 or EventID=1076 or EventID=6005 or EventID=6006 or EventID=6008) and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="Setup">*[System[Provider[@Name='eventlog' or @Name='Microsoft-Windows-Eventlog'] and (EventID=1074 or EventID=1076 or EventID=6005 or EventID=6006 or EventID=6008) and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="System">*[System[Provider[@Name='eventlog' or @Name='Microsoft-Windows-Eventlog'] and (EventID=1074 or EventID=1076 or EventID=6005 or EventID=6006 or EventID=6008) and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="Microsoft-Windows-Kernel-Power/Diagnostic">*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and (Level=1 ) and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="Microsoft-Windows-Kernel-Power/Thermal-Diagnostic">*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and (Level=1 ) and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and (Level=1 ) and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="System">*[System[Provider[@Name='User32'] and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-WER-SystemErrorReporting'] and TimeCreated[timediff(@SystemTime) &lt;= 172800000]]]</Select>
</Query>
</QueryList>


您可以将以下的值替换为172800000时间范围:

86400000-过去24小时

172800000-过去2天

604800000-过去7天

从服务器/计算机脱机时开始,这将显示更多详细信息
,其中包括Kernel-Power,User32和EventLog事件。

#4 楼

将@ user10082注释变成答案。提出的解决方案是一种单行的Powershell脚本:

Get-EventLog -LogName System |? {$_.EventID -in (6005,6006,6008,6009,1074,1076)} | ft TimeGenerated,EventId,Message -AutoSize –wrap


#5 楼

我更喜欢从命令行完成活动。这是您可以利用的代码片段的开头。这将显示最新的30,000条系统记录,并返回这些记录中的重新引导。

Get-EventLog -LogName System -Newest 30000 | Where-Object {$_.EventID -eq 6005}