以前ご紹介した記事(【Powershell】WSUSのクリーンアップを定期的に自動実行)のバージョンアップ版になります。
タスクで定期的に実行まではできている前提で、今度は結果をイベントログ(System)に書いてみます。
イベントログを監視するシステムがあればWSUSクリーンアップタスクのエラーをウォッチすることで、さらにメンテナンスフリーなWSUSに近づくと思います。
はじめに
Poweshell を管理者モードで起動して、
New-EventLog -LogName System -Source "WSUS Cleanup Task"
を実行します。
こんな感じです。
これはイベントログのSystemに新しいイベントのソースとしてWSUS Cleanup Taskというソースを登録しています。
好みに応じて変更してもらって大丈夫です。
変更した場合は以下のソース内のWSUS Cleanup Taskも同じものに変更してください。
PoweShell スクリプト
以下のソースを 任意の名前.ps1 で保存します。
$message = "WSUSクリーンアップ処理を開始します。"
Write-EventLog -LogName System -Source "WSUS Cleanup Task" -EventID 65000 -EntryType INFORMATION -Message $message
try{
$result = (Invoke-WsusServerCleanup -CompressUpdates -CleanupObsoleteUpdates -CleanupObsoleteComputers -CleanupUnneededContentFiles)
if($result -ne $null){
$message = "WSUSクリーンアップ処理が正常終了しました。`r`n`r`n"+$result
Write-EventLog -LogName System -Source "WSUS Cleanup Task" -EventID 65001 -EntryType INFORMATION -Message $message
}else{
$message = "WSUSクリーンアップ処理が正常終了しましたが結果が空です。"
Write-EventLog -LogName System -Source "WSUS Cleanup Task" -EventID 65002 -EntryType WARNING -Message $message
}
}
catch{
$message = $error[0].Exception.Message
$message = "WSUSクリーンアップ処理がエラー終了しました。`r`n`r`n"+$message
Write-EventLog -LogName System -Source "WSUS Cleanup Task" -EventID 65003 -EntryType ERROR -Message $message
}
補足
書き出すイベントログの種類をApplicationに変更したい場合は
SystemのところをApplicationに変更してください。
イベントIDは0~65535までで任意の番号に変更可能です。
-EventID xxxxx の xxxxxの部分をお好きな数字でどうぞ。
イベントの情報/警告/エラーのレベル変更は、
-EntryType yyyyyyyy の yyyyyyyyの部分を
INFORMATION or WARNING or ERROR
指定で任意の種類に変更してください。
ちなみに「期限の切れた更新プログラム」「置き換えられた更新」のクリーンアップはこのスクリプトではやっていません。
別途ご紹介予定の不要プログラムの拒否を定期的に実行するスクリプトでやるつもりなので、
あえて今回ご紹介のスクリプトでは割愛しました。
もしこちらのスクリプトで実行したい場合は、
$result = (Invoke-WsusServerCleanup -CompressUpdates -CleanupObsoleteUpdates -CleanupObsoleteComputers -CleanupUnneededContentFiles)
の部分を
$result = (Invoke-WsusServerCleanup -CompressUpdates -CleanupObsoleteUpdates -CleanupObsoleteComputers -CleanupUnneededContentFiles -DeclineExpiredUpdates -DeclineSupersededUpdates)
このように変更してもらえれば実行されます。
おわりに
本当はイベントログにエラーが書き込まれたときにメール送信したかったのですが、イベントログのメールを送信する機能は、Windows Server 2012 R2あたりから非推奨になり使えなくなってました。
PoweShellスクリプト内でメール送信させることもできるのでしょうけど、運用者が変わったりしてしまった後に、宛先やSMTPサーバーが変更されたりすると直すのを忘れられそうなので、無難なところでイベントログへの書き込みまでにしました。
※ 結局メール送信版も作成してみました。その記事はこちらです。