Windowsイベントログを検索したりテキスト形式でエクスポートする方法

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

Windows環境では、オペレーティングシステムの動作に関する記録が「イベントログ」に記録されています。

個人でWindowsを利用している場合、トラブルシューティングのときにイベントビューアーでイベントログを確認するぐらいですが、企業などでは、証跡として過去のイベントログを保存しておきたい場合があります。

そこでここでは、Windows 10を例に、マウス操作やコマンドでイベントログを検索して、汎用性の高いテキスト形式でエクスポートする方法を紹介します。

Windowsでコマンドでイベントログを生成する方法
ここでは、Windows 10環境を例に、WindowsコマンドやPowerShellコマンドレットを使ってイベントログにカスタムイベントを記録する方法を紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit22H2

イベントビューアーでエクスポートする

GUI操作でイベントログをエクスポートするには「イベントビューアー」を利用します。

特定のイベントログだけをエクスポートしたいときは、エクスポートする数が少なければ、エクスポートしたいイベントログを選択して、画面右側の操作メニューから「選択したイベントの保存」をクリックします。

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

ファイルの保存ダイアログが表示されたら、ファイルの種類から「テキスト(タブ区切り)」もしくは「CSV(カンマ区切り)」を選択し、ファイル名を指定して保存します。

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

テキスト(タブ区切り)で保存したファイルを開くと、次のように表示されています。

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

特定の条件に一致するイベントログを一括でエクスポートしたいときは、まず以下のいずれかの方法で表示するイベントログを絞り込みます。

現在表示しているログから特定のイベントログだけに絞り込みたいときは、画面右側のメニューから「現在のログをフィルター」をクリックして、フィルター条件を指定します。

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

複数のログやイベントソースから特定のイベントログだけに絞り込みたいときは、画面右側のメニューから「カスタムビューの作成」をクリックして、フィルター条件を指定します。

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

フィルターまたはカスタムビューを指定して、エクスポートしたいイベントログだけを表示させたら、画面右側のメニューから「すべてのイベントを名前を付けて保存」をクリックすることで、表示されているイベントログだけをエクスポートすることができます。

Windowsイベントログを検索したりテキスト形式でエクスポートする方法

wevtutilでエクスポートする

Windowsコマンド「wevtutil」では、イベントの種類やレベル、期間などを細かく設定して、特定のイベントログだけをエクスポートすることができます。

たとえば、システムイベントログをエクスポートするときは、次のように実行します。

> wevtutil qe System /f:text /rd:true >export.txt

イベントIDを絞り込む

システムイベントログからイベントID6006のログのみをエクスポートするときは、次のように実行します。

> wevtutil qe System /f:text /rd:true "/q:*[System[(EventID=6006)]]" >export.txt

イベントID6006もしくはイベントID13のログのみをエクスポートするときは、次のように実行します。

> wevtutil qe System /f:text /rd:true "/q:*[System[(EventID=6006 or EventID=13)]]" >export.txt

イベントレベルを絞り込む

システムイベントログから重大もしくはエラーログのみをエクスポートするときは、次のように実行します。

なお、Levelの数値は1:重大、2:エラー、3:警告、4:情報となります。

> wevtutil qe System /f:Text /rd:true "/q:*[System[(Level=2 or Level=1)]]" >export.txt

期間を絞り込む

システムイベントログから2020年8月1日から2020年8月9日までのイベントログをエクスポートするときは、次のように実行します。

なお、時間指定はGMTベースなので、9時間を引いた値で指定する必要があります。

> 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を絞り込む

システムインベントログからイベントID6006のログのみをエクスポートするときは、次のように実行します。

> wmic ntevent where "(LogFile='system' and EventCode='6006')" >export.txt

イベントID6006もしくはイベントID13のログのみをエクスポートするときは、次のように実行します。

> wmic ntevent where "(LogFile='system' and (EventCode='6006' or EventCode='13'))" >export.txt

イベントレベルを絞り込む

システムイベントログから警告のログのみをエクスポートするときは、次のように実行します。

なお、EventTypeの数値は1:エラー、2:警告、3:情報となります。

> wmic ntevent where "(logfile='system' and EventType='2')" >export.txt

期間を絞り込む

システムイベントログから2020年8月1日から2020年8月2日までのイベントログをエクスポートするときは、次のように実行します。

> 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」を付加して実行します。

> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" list brief >export.txt

出力する項目をTimeGenerated,EventType,EventCode,SourceName,Messageに絞り込むときは、次のように実行します。

> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" get TimeGenerated,EventType,EventCode,SourceName,Message >export.txt

出力形式を指定する

CSV形式で出力したいときは、次のように実行します。

> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" list /format:CSV >export.txt

HTML形式で出力したいときは、次のように実行します。

> wmic ntevent where "(logfile='system' and (timegenerated >= '20200801000000.0+540' and timegenerated <= '20200803000000.0+540'))" list /format:HTABLE >export.txt

Get-EventLogでエクスポートする

PowerShellでイベントログをエクスポートする場合は「Get-WinEvent」または後述の「Get-WinEvent」コマンドレットが利用できます。

Get-EventLogとGet-WinEventの違い

Windows環境でPowerShellを使って目的のイベントログを取り出したいときに利用できるコマンドレットには、Get-EventLogとGet-WinEventの二つが利用できます。

両者の大きな違いとしては、まずGet-EventLogはイベントビューアーで見ることができる現在のログファイルのみを扱うことができ、Get-WinEventでは現在のログファイルに加えて、バックアップされたログファイルも扱うことができます。

また、Get-EventLogは、コマンドのオプションでイベントログの絞り込みが比較的簡単にできますが、指定できるオプションが限られているため、より詳細な条件で絞り込みが必要なときはGet-WinEventのほうが便利です。

Get-WinEventコマンドレットで、システムログをエクスポートするときは、次のように実行します。

PS> Get-EventLog -LogName System >export.txt

イベントIDを絞り込む

システムログからイベントソース「DCOM」でイベントID「10016」のイベントログだけをエクスポートしたいときは、次のように実行します。

PS> Get-EventLog -LogName System -Source DCOM | Where-Object {$_.EventID -eq 10016} >export.txt

イベントレベルを絞り込む

アプリケーションログから「警告(Warning)」レベルのログだけをエクスポートするには、次のように実行します。

指定可能なログレベルは、Error/Information/Warning/FailureAudit/SuccessAuditです。

PS> Get-EventLog -LogName System -EntryType Warning >export.txt

期間を絞り込む

システムログから、2022年10月24日以降のイベントログだけをエクスポートしたいときは、次のように実行します。

PS> Get-EventLog -LogName System -After '2022/10/24 00:00:00' >export.txt

システムログから、2022年8月31日以前のイベントログだけをエクスポートしたいときは、次のように実行します。

PS> Get-EventLog -LogName System -Before '2022/08/31 23:59:59' >export.txt

なお「-After」オプションと「-Before」オプションを組み合わせれば、特定期間のイベントログを取り出すことも可能です。

出力項目を絞り込む

アプリケーションログの詳細情報から「ログの日付」「レベル」「イベントID」「メッセージ」の情報だけをエクスポートしたいときは、次のように実行します。

PS> Get-EventLog -LogName Application | Select-Object TimeGenerated,EntryType,InstanceID,Message >export.txt

出力形式を指定する

アプリケーションログをCSV形式ファイルで出力するには、次のように実行します。

PS> Get-EventLog -LogName Application | Export-CSV -Encoding Default C:\Work\Applog.csv

Get-WinEventでエクスポートする

Get-WinEventコマンドレットで、システムイベントログをテキスト形式でエクスポートするときは、次のように実行します。

PS> Get-WinEvent -FilterHashtable @{ LogName='System' } >export.txt

イベントIDを絞り込む

システムイベントログからイベントID6006のログのみをエクスポートするときは、次のように実行します。

PS> Get-WinEvent -FilterHashtable @{ LogName='System'; Id=6006 } >export.txt

システムイベントログからイベントID6006もしくはイベントID13のログのみをエクスポートするときは、次のように実行します。

PS> Get-WinEvent -FilterHashtable @{ LogName='System'; Id=(6006,13) } >export.txt

イベントレベルを絞り込む

システムイベントログからエラーのログのみをエクスポートするときは、次のように実行します。

なお、Levelの数値は1:重大、2:エラー、3:警告、4:情報となります。

PS> Get-WinEvent -FilterHashtable @{ LogName='System'; Level=2 } >export.txt

エラーと警告のログのみをエクスポートするときは、次のように実行します。

PS> Get-WinEvent -FilterHashtable @{ LogName='System'; Level=(2,3) } >export.txt

期間を絞り込む

システムイベントログから昨日のログのみをエクスポートするときは、次のように実行します。

PS> $sdate = (Get-Date).AddDays(-2)
PS> $edate = (Get-Date).AddDays(-1)
PS> Get-WinEvent -FilterHashTable @{ LogName="System"; StartTime = $sdate; EndTime=$edate } >export.txt

システムイベントログから2020年8月1日から2020年8月2日までのイベントログをエクスポートするときは、次のように実行します。

PS> $sdate = Get-Date -Date "2020/08/01"
PS> $edate = Get-Date -Date "2020/08/03"
PS> Get-WinEvent -FilterHashTable @{ LogName="System"; StartTime = $sdate; EndTime=$edate } >export.txt

参考

wevtutil | Microsoft Learn

wmic - Win32 apps | Microsoft Learn

Get-EventLog (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn

Get-WinEvent (Microsoft.PowerShell.Diagnostics) - PowerShell | Microsoft Learn

あとがき

イベントログは、デフォルト設定でもある程度の期間保存されていますが、カテゴリーごとに「最大ログサイズ」が設定されており、最大サイズを超えた場合、古いイベントから上書きされてしまうので、過去のイベントログを確認することがあるなら、ここで紹介している方法で定期的にエクスポートしておけば安心です。