PowerShellで例外をキャッチしてエラーメッセージをイベントログに出力しておくと、なんかあとあとデバッグが捗る。
PowerShellで汎用的に例外をキャッチするには、なんか処理のあとに trap[Exception]
でキャッチすれば、なんでも拾える。なんか処理の部分を特にtryとかで囲う必要はないです。
このとき $error[0].exception
にエラーメッセージが入ってるので、これをイベンログに出力しておけばOK。イベントログを書くのは Write-EventLog
で書く。
# なんか処理
...
# 例外をイベントログに出力
trap [Exception] {
Write-EventLog -LogName Application -Source MyApp -EventId 1 -EntryType Error -Message $error[0].exception
}
Write-EventLog
で使うイベントソース(この例だとMyApp)は予めイベントログに登録しておく必要がある。(登録されていないものを指定するとエラーになる)
イベントソースの登録はPowerShellからやるには New-EventLog
というのがあるのだけど、これは既に登録されてる場合にはエラーになるので、登録されていない場合だけ実行というハンドリングをしないといけなくて若干面倒くさいです。
簡単なのは、ツールのインストール処理とかに 複数回実行しても問題ないeventcreate
コマンドでイベントログ出力をコマンドラインから1回実行しておくとソースが登録されるので、これが一番簡単かもです。
C:¥> eventcreate /l Application /so MyApp /t information /id 1 /d "create eventlog" > nul