Windows環境では、オペレーティングシステムの動作に関する記録が「イベントログ」に記録されています。
個人でWindowsを利用している場合、イベントログを確認するのはトラブルシューティングのときぐらいですが、企業などでは、トラブルシューティング以外でも、証跡として過去のイベントログを保存しておきたい場合があります。
そこで、ここではマウス操作やコマンドで、イベントログを汎用性の高いテキスト形式でエクスポートする方法を紹介します。
目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。
ソフトウェア | バージョン |
---|---|
Windows10 Pro 64bit | 2004 |
GUI操作でエクスポートする
GUI操作でエクスポートするには、イベントビューアーを開き、エクスポートしたいイベントログを選択して、画面右側の操作メニューから「選択したイベントの保存」をクリックします。
ファイルの保存ダイアログが表示されたら、ファイルの種類から「テキスト(タブ区切り)」もしくは「CSV(カンマ区切り)」を選択し、ファイル名を指定して保存します。
テキスト(タブ区切り)で保存したファイルを開くと、次のように表示されています。
なお、イベントビューアーの画面に表示されているイベントをすべて保存するには、画面右側のメニューから「すべてのイベントを名前を付けて保存」をクリックします。
wevtutilでエクスポートする
Windowsコマンド「wevtutil」では、イベントの種類やレベル、期間などを細かく設定して、特定のイベントログだけをエクスポートすることができます。
システムイベントログをテキスト形式でエクスポートするときは、次のように実行します。
C:\> wevtutil qe System /f:text /rd:true >export.txt
イベントIDを絞り込む
特定のイベントIDのログのみをエクスポートすることもできます。
下の例では、システムイベントログからイベントID6006のログのみをエクスポートしています。
C:\> wevtutil qe System /f:text /rd:true "/q:*[System[(EventID=6006)]]" >export.txt
下の例では、イベントID6006もしくはイベントID13のログのみをエクスポートしています。
C:\> wevtutil qe System /f:text /rd:true "/q:*[System[(EventID=6006 or EventID=13)]]" >export.txt
イベントレベルを絞り込む
特定のイベントレベルのログのみをエクスポートすることもできます。
下の例では、システムイベントログから重大もしくはエラーログのみをエクスポートしています。
なお、Levelの数値は1:重大、2:エラー、3:警告、4:情報となります。
C:\> wevtutil qe System /f:Text /rd:true "/q:*[System[(Level=2 or Level=1)]]" >export.txt
期間を絞り込む
特定の時間範囲のイベントログのみをエクスポートすることもできます。
下の例では、システムイベントログから2020年8月1日から2020年8月9日までのイベントログをエクスポートしています。
なお、時間指定はGMTベースなので、9時間を引いた値で指定する必要があります。
C:\> wevtutil qe System /f:Text /rd:true "/q:*[System[TimeCreated[@SystemTime>='2020-07-31T15:00:00' and @SystemTime<='2020-08-09T15:00:00']]]" >export.txt
wmicでエクスポートする
wmicコマンドでも、イベントの種類やレベル、期間などを細かく設定して、特定のイベントログだけをエクスポートすることができます。
なお、コマンドをそのまま実行すると、大量のイベントログを取得しようとすると非常に時間がかかるので、以下に紹介している何らかの条件を指定して実行します。
イベントIDを絞り込む
特定のイベントIDのログのみをエクスポートすることができます。
下の例では、システムインベントログからイベントID6006のログのみをエクスポートしています。
C:\> wmic ntevent where "(LogFile='system' and EventCode='6006')" >export.txt
下の例では、イベントID6006もしくはイベントID13のログのみをエクスポートしています。
C:\> wmic ntevent where "(LogFile='system' and (EventCode='6006' or EventCode='13'))" >export.txt
イベントレベルを絞り込む
特定のイベントレベルのログのみをエクスポートすることもできます。
下の例では、システムイベントログから警告のログのみをエクスポートしています。
なお、EventTypeの数値は1:エラー、2:警告、3:情報となります。
C:\> wmic ntevent where "(logfile='system' and EventType='2')" >export.txt
期間を絞り込む
特定の時間範囲のイベントログのみをエクスポートすることもできます。
下の例では、システムイベントログから2020年8月1日から2020年8月2日までのイベントログをエクスポートしています。
C:\> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" >export.txt
出力項目を絞り込む
出力する項目を EventIdentifier, EventType, Message, RecordNumber, SourceName, TimeGeneratedに絞り込むときは「list brief」を付加して実行します。
C:\> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" list brief >export.txt
出力する項目をTimeGenerated,EventType,EventCode,SourceName,Messageに絞り込むときは、次のように実行します。
C:\> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" get TimeGenerated,EventType,EventCode,SourceName,Message >export.txt
出力形式を指定する
出力形式を指定することもできます。
たとえば、CSV形式で出力するときは、次のように実行します。
C:\> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" list /format:CSV >export.txt
たとえば、HTML形式で出力するときは、次のように実行します。
C:\> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" list /format:HTABLE >export.txt
Get-WinEventでエクスポートする
PowerShellでイベントログをエクスポートする場合は「Get-WinEvent」コマンドレットが利用できます。
システムイベントログをテキスト形式でエクスポートするときは、次のように実行します。
PS C:\> Get-WinEvent -FilterHashtable @{ LogName='System' } >export.txt
イベントIDを絞り込む
特定のイベントIDのログのみをエクスポートすることもできます。
下の例では、システムイベントログからイベントID6006のログのみをエクスポートしています。
PS C:\> Get-WinEvent -FilterHashtable @{ LogName='System'; Id=6006 } >export.txt
下の例では、システムイベントログからイベントID6006もしくはイベントID13のログのみをエクスポートしています。
PS C:\> Get-WinEvent -FilterHashtable @{ LogName='System'; Id=(6006,13) } >export.txt
イベントレベルを絞り込む
特定のイベントレベルのログのみをエクスポートすることもできます。
以下の例では、システムイベントログからエラーのログのみをエクスポートしています。
なお、Levelの数値は1:重大、2:エラー、3:警告、4:情報となります。
PS C:\> Get-WinEvent -FilterHashtable @{ LogName='System'; Level=2 } >export.txt
下の例では、エラーと警告のログのみをエクスポートしています。
PS C:\> Get-WinEvent -FilterHashtable @{ LogName='System'; Level=(2,3) } >export.txt
期間を絞り込む
特定の時間範囲のイベントログのみをエクスポートすることもできます。
下の例では、システムイベントログから昨日のログのみをエクスポートしています。
PS C:\>$sdate = (Get-Date).AddDays(-2)
PS C:\>$edate = (Get-Date).AddDays(-1)
PS C:\> Get-WinEvent -FilterHashTable @{ LogName="System"; StartTime = $sdate; EndTime=$edate } >export.txt
下の例では、システムイベントログから2020年8月1日から2020年8月2日までのイベントログをエクスポートしています。
PS C:\> $sdate = Get-Date -Date "2020/08/01"
PS C:\> $edate = Get-Date -Date "2020/08/03"
PS C:\> Get-WinEvent -FilterHashTable @{ LogName="System"; StartTime = $sdate; EndTime=$edate } >export.txt
あとがき
イベントログは、デフォルト設定でもある程度の期間保存されていますが、カテゴリーごとに「最大ログサイズ」が設定されており、最大サイズを超えた場合、古いイベントから上書きされてしまうので、過去のイベントログを確認することがあるなら、ここで紹介している方法で定期的にエクスポートしておけば安心です。