🚨

[Windowsイベントログ]既存のイベントソース・イベントIDをコマンドで確認する方法

2024/03/25に公開

環境

Windows 標準でインストールされている PowerShell バージョン 5.1 の Desktop Editionや
PowerShell バージョン 6.0 以降の Core Edition(またの名をPowerShell Core)で
イベントログの書き込みが可能です。

※ PowerShell 5.1でイベントログを出力する方法は、こちらの記事を参照してください。
※ PowerShell 6.0以降でイベントログを出力する方法は、こちらの記事を参照してください。

管理者権限を持たない一般ユーザーでイベントログを出力する場合、Windows OS に登録されているイベントソース(イベントプロバイダー)やイベントIDを調べ、コマンド実行時に指定してあげる必要があります。

実際に検証した結果も合わせて紹介します。

この記事のターゲット

  • PowerShellユーザーの方
    検証は バージョン 5.1 と バージョン 7.4 で実施。
    2024年3月現在、5.1 以降であれば対応可能なコマンドレットを紹介。

  • 既存のイベントソース(イベントプロバイダー)を調べたい方

  • 既存のイベントIDを調べたい方

バージョン 5.1

Desktop Edition
PS C:\WINDOWS\system32> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.4046
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.4046
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\WINDOWS\system32>

バージョン 7.4

Core Edition
PS C:\Users\"ユーザー名"> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.4.1
PSEdition                      Core
GitCommitId                    7.4.1
OS                             Microsoft Windows 10.0.19045
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

PS C:\Users\"ユーザー名">

確認方法

冒頭で記載した通り、既存のイベントソースやイベントIDを指定してイベントログを出力したい場合、
登録されている情報を確認する必要があります。

それぞれコマンドレットで確認する方法を紹介。

既存のイベントソースを確認する方法

既存のイベントソースを取得
# Get-WinEventでイベントソースを確認 → Format-Tableで表形式に変更 → Out-File -Width で横の最大文字数を設定
Get-WinEvent -ListProvider * -Erroraction Silentlycontinue | Format-Table -AutoSize -Wrap | Out-File -filepath "出力ファイルの絶対パス" -Width "行の最大文字数"
# 出力したファイルを確認
Get-Content "出力ファイルの絶対パス"
実際に実行した結果
PS C:\Users\"ユーザー名"> Get-WinEvent -ListProvider * -Erroraction Silentlycontinue | Format-Table -AutoSize -Wrap | Out-File -filepath D:\Downloads\getwinevent-all-listproviders.txt -Width 10000
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Content D:\Downloads\getwinevent-all-listproviders.txt

Name                                                                       LogLinks                                                                                                                                                                                                                                                                                                                     
----                                                                       --------                                                                                                                                                                                                                                                                                                                     
PowerShell                                                                 {Windows PowerShell}                                                                                                                                                                                                                                                                                                         
Visual Studio Audit Log                                                    {Visual Studio}                                                                                                                                                                                                                                                                                                              

~~~ 省略 ~~~

Microsoft-Windows-FunctionDiscovery                                        {Analytic}                                                                                                                                                                                                                                                                                                                   
Microsoft-Windows-Winsrv                                                   {Application, Microsoft-Windows-Winsrv/Analytic}                                                                                                                                                                                                                                                                             
Microsoft-AppV-ServiceLog                                                  {Microsoft-AppV-Client/Debug}                                                                                                                                                                                                                                                                                                

~~~ 省略 ~~~

Microsoft-Windows-Security-IdentityStore                                   {Microsoft-Windows-Security-IdentityStore/Performance}                                                                                                                                                                                                                                                                       
Microsoft-Windows-Services                                                 {Microsoft-Windows-Services/Diagnostic}                                                                                                                                                                                                                                                                                      




PS C:\Users\"ユーザー名">

別記事で作成予定:既存のイベントソースを一覧で表示(全1,256件)
  インストールしているソフトウェアやアプリなどにより変動。
  私の環境で確認した結果を表示。
➡ 2024.4.14 別の記事で作成しました。

既存のイベントIDを確認する方法

指定したイベントソースで登録されているイベントIDを確認

指定したイベントソースで登録されているイベントIDを取得
# Get-WinEventでイベントIDを確認 → Format-Tableで表形式に変更 → Out-File -Width で横の最大文字数を設定
(Get-WinEvent -ListProvider "対象のイベントソース").Events | Format-Table Id, Description -AutoSize -Wrap | Out-File -filepath "出力ファイルの絶対パス" -Width "行の最大文字数"
# 出力したファイルを確認
Get-Content "出力ファイルの絶対パス"
実際に実行した結果
PS C:\Users\"ユーザー名"> (Get-WinEvent -ListProvider "Microsoft-Windows-Winsrv").Events | Format-Table Id, Description -AutoSize -Wrap | Out-File -filepath D:\Downloads\getwinevent-winsrv-eventid.txt -Width 10000
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Content D:\Downloads\getwinevent-winsrv-eventid.txt

Id Description
-- -----------
10001 次のアプリケーションによりシャットダウンが拒否されました: %1。
10002 次のアプリケーションは停止したために終了しました: %1。
12001
12001
12002
12002
12003
12003
12005
12005
12006
12006
12007
12007
12008
12008
12009
12010
12011
12012

PS C:\Users\"ユーザー名">

イベントソース と イベントID の両方登録されているデータのみ確認する方法

イベントソースの中には、イベントソースは登録されているがイベントIDは登録されていないデータも含まれています。
イベントログを正常に出力させるためには、イベントソースとそのイベントソースで登録されているイベントIDの指定が必要。

存在するイベントソース と 存在しないイベントID で指定してもイベントログには出力されるが、
「ソース“指定した存在するイベントソース”からのイベント ID“指定して存在しないイベントID”の説明が見つかりません。~」
というような内容がメッセージ内容の先頭に記録される。

その為、イベントソース と イベントID の両方が登録されているデータを取得する方法も調べました。

両方登録されているデータのみ取得
# 全イベントソース(イベントプロバイダー)を取得 → イベントIDが登録されているデータのみを抽出 → Out-File -Width で横の最大文字数を設定
Get-WinEvent -ListProvider * -Erroraction Silentlycontinue | Select-Object Name -ExpandProperty Events | Format-Table Name, ID, Description | Out-File -filepath "出力ファイルの絶対パス" -Width "行の最大文字数"
# 出力したファイルを確認
Get-Content "出力ファイルの絶対パス"
実際に実行した結果
PS C:\Users\"ユーザー名"> Get-WinEvent -ListProvider * -Erroraction Silentlycontinue | Select-Object Name -ExpandProperty Events | Format-Table Name, ID, Description | Out-File -filepath D:\Downloads\getwinevent-all-eventid.txt -Width 10000
PS C:\Users\"ユーザー名">
PS C:\Users\"ユーザー名"> Get-Content D:\Downloads\getwinevent-all-eventid.txt

Name                                                  Id Description
----                                                  -- -----------
Ntfs                                                  55 ボリューム %1 のファイル システム構造で破損が検出されました。…
Ntfs                                                 130 ボリューム %2 のファイル システム構造は修復されました。
Ntfs                                                 131 ボリューム %2 のファイル システム構造は修正できませんでした。…
Ntfs                                                 132 短時間の間に修復イベントが数多く発生しました。…
Ntfs                                                 133 %1 の修復イベントの送信をスキップしました。修復イベントの送信は再開されます。…
PowerShellCore                                      4097 Computer Name $null or . resolve to LocalHost

~~~ 省略 ~~~

Microsoft-Windows-Services                           203
Microsoft-Windows-Services                           204
Microsoft-Windows-Services                           205

PS C:\Users\"ユーザー名">

別記事で作成予定:イベントIDを登録数が多いイベントソースを一覧で表示(全929件)
  インストールしているソフトウェアやアプリなどにより変動。
  私の環境で確認した結果を表示。
➡ 2024.4.14 別の記事で作成しました。

参考情報

参考情報:見切れたり改行したりする横長のコマンド結果を折り返しせずに確認する方法

まとめ

  • 既存のイベントソースを確認するコマンド

    既存のイベントソースを取得
    Get-WinEvent -ListProvider * -Erroraction Silentlycontinue | Format-Table -AutoSize -Wrap | Out-File -filepath "出力ファイルの絶対パス" -Width "行の最大文字数"
    
  • 既存のイベントIDを確認するコマンド

    • 指定したイベントソースで登録されているイベントIDを確認するコマンド

      指定したイベントソースで登録済みのイベントIDを確認
      (Get-WinEvent -ListProvider "対象のイベントソース").Events | Format-Table Id, Description -AutoSize -Wrap | Out-File -filepath "出力ファイルの絶対パス" -Width "行の最大文字数"
      
    • イベントソース と イベントID の両方登録されているデータのみ確認する方法

      両方登録済みのデータのみ取得
      Get-WinEvent -ListProvider * -Erroraction Silentlycontinue | Select-Object Name -ExpandProperty Events | Format-Table Name, ID, Description | Out-File -filepath "出力ファイルの絶対パス" -Width "行の最大文字数"
      

関連記事

https://haretokidoki-blog.com/pasocon_windows10-eventsource-eventid-lists/
https://zenn.dev/haretokidoki/articles/0a179fe71a2cc8
https://zenn.dev/haretokidoki/articles/af3e404855c54b
https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960

GitHubで編集を提案

Discussion