システムの起動・終了時に記録されるイベントログ
Windows Vistaにて調べてみました。
ログのタイミング | ソース | イベントID | メッセージ |
---|---|---|---|
起動 | EventLog | 6005 | イベント ログ サービスが開始されました。 |
終了 | EventLog | 6006 | イベント ログ サービスが停止されました。 |
休止状態に移行 | Kernel-Power | 42 | システムがスリープ状態になります。 |
休止状態から回復 | Power-Troubleshooter | 1 | システムはスリープ状態から再開しました。 |
ただし、Power-Troubleshooterメッセージは即時に記録されず、終了時または休止状態に移行時に一緒に記録されるようです。
これらのイベントをWMIで取得するためのコードも載せておきます。プロパティの名前などは WMI Creator で確認すると便利ですね。
var wbemFlagReturnImmediately = 0x10; var wbemFlagForwardOnly = 0x20; var eventObject = GetObject('winmgmts:{impersonationLevel=impersonate}'); var eventSet = eventObject.ExecQuery( 'select TimeGenerated, EventCode from Win32_NTLogEvent' + ' where ((EventCode = 6005 or EventCode = 6006) and SourceName = "EventLog")' + ' or (EventCode = 1 and SourceName = "Microsoft-Windows-Power-Troubleshooter")' + ' or (EventCode = 42 and SourceName = "Microsoft-Windows-Kernel-Power")', 'WQL', wbemFlagReturnImmediately | wbemFlagForwardOnly);
ブート・シャットダウン日時を表示するWSHスクリプト
PCをいつ起動していつシャットダウンしたかを表示するスクリプト。
<job id="eventlogview"> <script language="VBScript"> WScript.Echo "<eventLog>" Set EventObject = GetObject("winmgmts:{impersonationLevel=impersonate}") Set EventSet = EventObject.ExecQuery("select * from Win32_NTLogEvent") For Each AnEvent In EventSet If AnEvent.EventCode = 6005 Then WScript.Echo "<start>" & AnEvent.TimeGenerated & "</start>" ElseIf AnEvent.EventCode = 6006 Then WScript.Echo "<end>" & AnEvent.TimeGenerated & "</end>" End If Next WScript.Echo "</eventLog>" </script> </job>
実行結果は以下の感じ。これをSOAPクライアントでWebに投げれば、生活時間の可視化ができるね。面白そう。
D:\tmp>cscript eventlogview.wsf Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. <eventLog> <start>20071210215654.000000+540</start> <end>20071210001810.000000+540</end> <start>20071206233622.000000+540</start> <end>20071206095330.000000+540</end> <start>20071206091018.000000+540</start> <end>20071205001757.000000+540</end> <start>20071204195513.000000+540</start> ...