PowerShellでイベントログを取得する時、「指定した選択条件に一致するイベントが見つかりませんでした。」が煩わしいのでcatchする
Follow @venividivici830 Windowsサーバーを点検する時など、イベントログをPowerShellで操作すると便利です。 Get-WinEventコマンドレットでイベントログを取得できますが、指定した条件に当てはまるイベントログがない場合、下記のエラーがスローされます。 Get-WinEvent : 指定した選択条件に一致するイベントが見つかりませんでした。 〜 NoMatchingEventsFound, 〜 NoMatchingEventsFoundが示すように、ただ指定した条件にマッチするイベントがなかっただけなので、条件としてエラーのレベルを「重大」や「エラー」にした場合は、特に問題ないことが多い。 エラーとして赤文字でコンソールに出力されるのは煩わしいので、catchする。 下記は、スクリプトの例。 $ErrorActionPreference = "Stop" $today = Get-Date $from = $today.AddMonths(-1) $filter = @{LogName="system"; Level=1; StartTime=$from} try { Get-WinEvent -FilterHashtable $filter } catch { $category = $Global:Error[0].CategoryInfo.Category.ToString() if ($category -eq "ObjectNotFound") { # 問題ない } else { # Error Handling } } 上の例では、過去1ヶ月分の、WIndowsログ→システムの、エラーレベルが「重大」のログを取得している。 下記の部分のsystemを「application」に変えれば、アプリケーションのログを取得できる。 また、Level=2、3とすることで、それぞれエラーレベルが「エラー」、「警告」のログを取得できる。 $filter = @{LogName="system"; Level=1; StartTime...