[Windowsイベントログ]既存のイベントソース・イベントIDをコマンドで確認する方法
環境
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
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
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を確認
# 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 "行の最大文字数"
-
関連記事
Discussion