この記事では、Windowsのコマンドプロンプトを使用して、特定のエラーメッセージがログに記録された場合に通知を自動送信する方法を解説します。具体的なコード例とその詳細、さらに応用例を4つ紹介します。
コマンドプロンプトとは?
コマンドプロンプトは、Windowsオペレーティングシステムにおいて、ユーザーがコンピュータにテキストベースの「コマンド」を入力して直接操作するためのインターフェースです。このコマンドは、特定の操作を行うための指示や命令をコンピュータに伝えるもので、ファイルの操作、システム設定の変更、ネットワークの管理など、様々なタスクを実行することが可能です。グラフィカルユーザーインターフェース(GUI)の前身として、初期のコンピュータシステムで主に使用されていましたが、今日でも多くの専門家や上級ユーザーが高度なタスクを効率的に実行するためにコマンドプロンプトを使用しています。
基本コードの作成
まず、基本となるコードを示します。
1 2 3 4 5 6 |
@echo off findstr /i "特定のエラーメッセージ" C:\path\to\log.txt if %errorlevel% == 0 ( powershell -command "[System.Net.Mail.MailMessage]::new('from@example.com', 'to@example.com', 'エラー通知', '特定のエラーが検出されました。').Send()" ) |
コードの詳細解説
このコードは、指定されたログファイル(log.txt
)から特定のエラーメッセージを検索し、そのエラーメッセージが存在した場合にメール通知を行うものです。
1. findstr
:特定の文字列をログファイル内で検索します。
2. %errorlevel%
:直前のコマンドの結果を取得します。エラーメッセージが見つかった場合、0が返されます。
3. powershell
:PowerShellのコマンドを実行します。メールの送信には.NET Frameworkのメール関連のクラスを使用しています。
応用例
1. 複数のエラーメッセージを検索する
一つのログファイル内で複数のエラーメッセージを検索し、それぞれに対して異なる通知を送る場合のコードです。
1 2 3 4 5 6 7 8 |
@echo off for %%i in ("エラー1" "エラー2") do ( findstr /i "%%i" C:\path\to\log.txt if %errorlevel% == 0 ( powershell -command "[System.Net.Mail.MailMessage]::new('from@example.com', 'to@example.com', 'エラー通知: %%i', '%%iが検出されました。').Send()" ) ) |
2. ログファイルの場所を動的に取得
ログファイルの場所が固定ではない場合、動的にその場所を取得して処理する方法です。
1 2 3 4 5 6 7 8 9 |
@echo off set LOG_PATH=C:\path\to\logs\*.txt for /R %%f in (%LOG_PATH%) do ( findstr /i "特定のエラーメッセージ" "%%f" if %errorlevel% == 0 ( powershell -command "[System.Net.Mail.MailMessage]::new('from@example.com', 'to@example.com', 'エラー通知', '特定のエラーが%%fで検出されました。').Send()" ) ) |
3. エラー発生時のログ内容をメール本文に含める
エラーが発生した場合、そのログの内容をメール本文として送信する方法です。
1 2 3 4 5 6 7 8 |
@echo off set LOG=C:\path\to\log.txt findstr /i "特定のエラーメッセージ" %LOG% > temp.txt if %errorlevel% == 0 ( set /p ERR_CONTENT=<temp.txt powershell -command "$body = Get-Content -Path 'temp.txt'; [System.Net.Mail.MailMessage]::new('from@example.com', 'to@example.com', 'エラー通知', $body).Send()" ) |
4. 通知の送信方法を変更する
メール以外の通知方法(例:SlackのWebhook)を使用する場合の方法です。
1 2 3 4 5 6 |
@echo off findstr /i "特定のエラーメッセージ" C:\path\to\log.txt if %errorlevel% == 0 ( powershell -command "Invoke-RestMethod -Uri 'https://hooks.slack.com/services/T000/B000/XXXX' -Method Post -Body @{'text'='特定のエラーが検出されました。'}" ) |
まとめ
コマンドプロンプトを使用して特定のエラーメッセージがログに記録された場合の通知を自動送信する方法について解説しました。これを機に、コマンドプロンプトを活用して、より高度なシステム管理を行ってみてはいかがでしょうか。
コメント