見出し画像

PowerShell 重大エラーを取得するスクリプト

パソコンが不調なとき、システムログには重大なエラーが出ています。
だいたいは不調を起こす数日前から出ているので定期的にチェックしておけば事前対策が取れます。そんなときに使うスクリプトです。

タスクスケジューラに管理者権限で動くようにしておけば設定してテキストで出力するかメール通知すれば自動チェックになります。


### 1か月前の重大エラーを取得する
$tmp=$ErrorActionPreference
$ErrorActionPreference = "Stop"
$from = (Get-Date).AddMonths(-1)
$filter = @{LogName="system","application"; Level=1; StartTime=$from}
try {
 Get-WinEvent -FilterHashtable $filter
} catch {
 write-host "エラーなし"
}
$ErrorActionPreference=$tmp


### 30日前までの重大エラーを取得する
$tmp=$ErrorActionPreference
$ErrorActionPreference = "Stop"
$from = (Get-Date).AddDays(-30)
$filter = @{LogName="system","application"; Level=1; StartTime=$from}
try {
 Get-WinEvent -FilterHashtable $filter
} catch {
 write-host "エラーなし"
}
$ErrorActionPreference=$tmp


### 30日前までの重大エラーを取得する 日付で並び替えて10件だけ取り出す
$tmp=$ErrorActionPreference
$ErrorActionPreference = "Stop"
$from = (Get-Date).AddDays(-30)
$filter = @{LogName="system","application"; Level=1; StartTime=$from}
try {
 Get-WinEvent -FilterHashtable $filter | Sort-Object -Property TimeCreated -Descending | Select -First 10
} catch {
 write-host "エラーなし"
}
$ErrorActionPreference=$tmp


### 30日前までの重大エラーを取得する 日付で並び替えて10件だけ取り出す かつ整形する
$ErrorIvent=""
$tmp=$ErrorActionPreference
$ErrorActionPreference = "Stop"
$from = (Get-Date).AddDays(-30)
$filter = @{LogName="system","application"; Level=1; StartTime=$from}
try {
 $a=Get-WinEvent -FilterHashtable $filter | Sort-Object -Property TimeCreated -Descending | Select -First 10
 foreach($i in $a){
  $ErrorIvent+=$i.TimeCreated.ToString("yyyy/MM/dd"),"ID:" ,$i.ID ,"Mes:" ,$i.ProviderName.replace('Microsoft-Windows-',''),  $i.Message ,"`r`n"
 }
} catch {
}
$ErrorActionPreference=$tmp
$ErrorIvent




Level=1をLevel=1,2やLevel=2,3にすれば警告や軽微なエラーが取得できるようになります。


タスクスケジューラへの登録はこちらの記事をどうぞ


#PowerShell #プログラミング #プログラミング学習 #Windows #重大なエラー #タスクスケジューラ #故障予兆

いいなと思ったら応援しよう!