PowerShellを使ってイベントログを取得するサンプルコードを以下に記します。
動作確認はPowerShellv4.0を使用しました。
以下にGet-WinEvnetコマンドレットを使用したサンプルコードを記します。
以下のサンプルは、自機のイベントログを対象とし、ログの対象は、「システム」、ログレベルは「エラー」
対象時間は24時間前から現在までと指定しています。
$hostname = "localhost"
$filter = @{}
$filter.Add("LogName", "SYSTEM")
$filter.Add("Level", 2) # LogLevel 1:Critical, 2:Error, 3:Warning
$filter.Add("StartTime", (Get-Date).AddHours(-24)) # Now - 24hour
$filter.Add("EndTime", (Get-Date)) # Now
Get-WinEvent -ComputerName $hostname -ErrorAction SilentlyContinue -FilterHashtable $filter
ハッシュ変数$filterにStartTimeとEndTimeを指定していますが、省略可能です。
ログレベル(Level)も省略可能です。
ソースを指定する場合は、以下のようにハッシュにSourceを追加します。
以下のサンプルでは、Service Control Managerを指定した例です。
イベントビューアでソースの部分になります。
$hostname = "localhost"
$source = "Service Control Manager"
$filter = @{}
$filter.Add("LogName", "SYSTEM")
$filter.Add("Level", 2) # LogLevel 1:Critical, 2:Error, 3:Warning
$filter.Add("StartTime", (Get-Date).AddHours(-24)) # Now - 24hour
$filter.Add("EndTime", (Get-Date)) # Now
Get-WinEvent -ComputerName $hostname -ErrorAction SilentlyContinue -FilterHashtable $filter | ? { $_.ProviderName -eq $source }
$hostnameに遠隔マシンを設定すれば、サーバの情報も取得することができます。
以上、Get-WinEventコマンドレットを使用してイベントログを取得する方法でした。