イベントログから起動・終了履歴を取得 [PowerShell]
PowerShellでWindows起動・終了についてのログを取得。
○対象とする動作環境と必要事項
- Windows Vista、7、Windows Server 2008 R2
- .net Framework 3.5以降
- Windows PowerShell 2.0以降
この前紹介したログオン履歴の取得には管理者権限が必要でしたが、今回は管理者権限は不要です。
○ソース"EventLog"のイベントID 6005と6006
Windows Vistaと7で使える方法です。Windows Serverはよくわかりません。
イベントID 6005が起動、6006が終了のログです。
TimeCreated ProviderName Id Message ----------- ------------ -- ------- 2011/11/22 2:43:20 EventLog 6005 イベント ログ サービスが開... 2011/11/22 2:41:43 EventLog 6006 イベント ログ サービスが停... 2011/11/18 18:03:32 EventLog 6005 イベント ログ サービスが開... 2011/11/18 18:02:08 EventLog 6006 イベント ログ サービスが停... 2011/11/14 21:09:23 EventLog 6005 イベント ログ サービスが開... 2011/11/14 21:08:30 EventLog 6006 イベント ログ サービスが停... 2011/11/14 20:31:45 EventLog 6005 イベント ログ サービスが開... 2011/11/14 20:29:52 EventLog 6006 イベント ログ サービスが停... 2011/11/09 18:58:40 EventLog 6005 イベント ログ サービスが開... 2011/11/09 18:50:50 EventLog 6006 イベント ログ サービスが停...
"-filterxpath"スイッチでXPathを使ってフィルタークエリを記述しています。また"-maxevents"スイッチでログを最近10件のみ取得するように指定しています。以前やったことと同じなので細かい説明は省きます。
クエリの中でソース名やイベントIDをシングルクォーテーションで囲んでいますが、この場合はなくても正しく実行できます。
○ソース"Kernel-General"のイベントID 12と13
新たにWindows 7で記録されるようになったログを利用しています。なのでたぶんWindows Vistaでは使えません。
イベントID 12が起動、13が終了のログです。これでWindows 7の場合、今まで紹介しただけでも3種類のイベントログから起動ログを取れるわけですが、どれを取るかは各々の判断にお任せします。
TimeCreated ProviderName Id Message ----------- ------------ -- ------- 2011/11/22 21:04:14 Microsoft-Windows-Kernel-G... 12 オペレーティング システム... 2011/11/22 18:57:26 Microsoft-Windows-Kernel-G... 13 オペレーティング システム... 2011/11/22 18:43:43 Microsoft-Windows-Kernel-G... 12 オペレーティング システム... 2011/11/22 18:41:49 Microsoft-Windows-Kernel-G... 13 オペレーティング システム... 2011/11/22 18:31:43 Microsoft-Windows-Kernel-G... 12 オペレーティング システム... 2011/11/22 18:29:29 Microsoft-Windows-Kernel-G... 13 オペレーティング システム... 2011/11/22 14:09:19 Microsoft-Windows-Kernel-G... 12 オペレーティング システム... 2011/11/22 6:28:07 Microsoft-Windows-Kernel-G... 13 オペレーティング システム... 2011/11/22 6:20:25 Microsoft-Windows-Kernel-G... 12 オペレーティング システム... 2011/11/22 5:00:07 Microsoft-Windows-Kernel-G... 13 オペレーティング システム...
format-tableコマンドと繋いで出力形式を変えると少し見易くなります。ただしここで出てくる日時は日本時間ではなくUTCです。
Message ------- オペレーティング システムはシステム時刻 2011-11-22T12:04:14.125599300Z に開始しました。 オペレーティング システムはシステム時刻 2011-11-22T09:57:26.643706400Z にシャット ダウンします。 オペレーティング システムはシステム時刻 2011-11-22T09:43:43.125599300Z に開始しました。 オペレーティング システムはシステム時刻 2011-11-22T09:41:49.235925100Z にシャット ダウンします。 オペレーティング システムはシステム時刻 2011-11-22T09:31:43.125599300Z に開始しました。 オペレーティング システムはシステム時刻 2011-11-22T09:29:29.321243500Z にシャット ダウンします。 オペレーティング システムはシステム時刻 2011-11-22T05:09:19.125599300Z に開始しました。 オペレーティング システムはシステム時刻 2011-11-21T21:28:07.489708900Z にシャット ダウンします。 オペレーティング システムはシステム時刻 2011-11-21T21:20:25.125599300Z に開始しました。 オペレーティング システムはシステム時刻 2011-11-21T20:00:07.877281400Z にシャット ダウンします。
ファイルに書き出す方法は以前に紹介したとおりです。
- 結果をそのままテキスト(*.txt)で出力 → Out-Fileコマンドと繋ぐ
- イベントログアーカイブファイル(*.evtx)で出力 → System.Diagnostics.Eventing.Reader.EventLogSessionクラスのExportLogメソッドを利用
- XML(*.xml)で出力 → イベントログをファイルに書き出す [PowerShell]
○更新履歴
- 2011/11/22 作成