5️⃣
PowerShell 5.1でイベントログを出力する方法
概要
Windows標準でインストールされているPowerShell 5.1の環境でイベントログを出力する方法を紹介。
なお、バージョンが6.0以降(PowerShell Core Edition)では、同じ方法を使えません。
※ PowerShell 6.0以降でイベントログを出力する方法は、こちらの記事を参照してください。
この記事のターゲット
- PowerShell ユーザーの方
- PowerShell バージョン 5.1 環境でイベントビューアーにログを出力したい方
- 【パターンA】自作のイベントソースとイベントIDで出力
- 【パターンB】既存のイベントソースとイベントIDで出力
環境
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>
対応方法
イベントログに出力する方法は、一般ユーザーでも実行可能なWrite-EventLogコマンドレット。
出力するログの種類が既存のイベントIDやイベントソース(イベントプロバイダー)ではなく、自作したものを指定したい場合は、事前にNew-EventLogでイベントソースの作成が必要となります。
なお、New-EventLogは、管理者権限が必要なコマンドレットです。
【パターンA】自作のイベントソースとイベントIDで出力
イベントビューアーにある Windows ログ -> アプリケーション内 に自作のソース "MyAppSource" でログを出力。
-
イベントソースを作成
“管理者として実行”の必要ありNew-EventLog -LogName "ログの種類を指定(ログの保存場所)" -Source "作成するイベントソース名"
実際に実行した結果PS C:\WINDOWS\system32> New-EventLog -LogName Application -Source MyAppSource PS C:\WINDOWS\system32>
すでに指定したイベントソースが存在する場合はエラーPS C:\WINDOWS\system32> New-EventLog -LogName Application -Source MyAppSource New-EventLog : "MyAppSource" ソースは、既に "localhost" コンピューターに登録されています。 発生場所 行:1 文字:1 + New-EventLog -LogName Application -Source MyAppSource + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [New-EventLog]、InvalidOperationException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.NewEventLogCommand PS C:\WINDOWS\system32>
イベントソースを削除する場合 < クリックで折りたたみが開く >
“管理者として実行”の必要ありRemove-EventLog -Source MyAppSource
実際に実行した結果PS C:\WINDOWS\system32> New-EventLog -LogName Application -Source MyAppSource PS C:\WINDOWS\system32>
-
自作のイベントログを出力
ここでは管理者権限は不要(前の工程でイベントソース作成済みのため)Write-EventLog -LogName "ログの種類" -Source "対象のイベントソース" -EntryType "エラーレベル" -EventId "対象のイベントID" -Message "出力するメッセージ内容"
前述で作成したイベントソースを指定してイベントログを出力。
実際に実行した結果PS C:\Users\"ユーザー名"> Write-EventLog -LogName Application -Source MyAppSource -EntryType Information -EventId 1001 -Message "Test Message." PS C:\Users\"ユーザー名">
画像:Write-EventLogコマンドレットにより出力したログをイベントビューアーで確認
【パターンB】既存のイベントソースとイベントIDで出力
-
指定するイベントソース・イベントIDを決定
※ 既存のイベントソースやイベントIDを確認する方法は、こちらの記事を参照してください。
-
既存のイベントIDでイベントログを出力
作成済みのイベントソースを指定する為、管理者権限なしで実行可能Write-EventLog -LogName "ログの種類" -Source "対象のイベントソース" -EntryType "エラーレベル" -EventId "対象のイベントID" -Message "出力するメッセージ内容"
前述で作成したイベントソースを指定してイベントログを出力。
実際に実行した結果PS C:\Users\"ユーザー名"> Write-EventLog -LogName Application -Source "Microsoft-Windows-Winsrv" -EntryType Error -EventId 10002 -Message "Test Data" PS C:\Users\"ユーザー名">
画像:出力したログをイベントビューアーで確認
まとめ
-
自作のイベントログを出力する方法
-
イベントソースを作成
“管理者として実行”の必要ありNew-EventLog -LogName "ログの種類を指定(ログの保存場所)" -Source "作成するイベントソース名"
-
作成したイベントソースを指定しイベントログを出力
自作のイベントソースとイベントIDを指定(管理者権限は不要)Write-EventLog -LogName "ログの種類" -Source "対象のイベントソース" -EntryType "エラーレベル" -EventId "対象のイベントID" -Message "出力するメッセージ内容"
-
-
既存のイベントソース・イベントIDを指定する方法
既存のイベントソースとイベントIDを指定(管理者権限は不要)Write-EventLog -LogName "ログの種類" -Source "対象のイベントソース" -EntryType "エラーレベル" -EventId "対象のイベントID" -Message "出力するメッセージ内容"
関連記事
Discussion