【PowerShell】特定のプロセスを定期監視して自動で再起動するスクリプト

【PowerShell】特定のプロセスを定期監視して自動で再起動するスクリプト PowerShell

Windows上で常時動作させておきたいアプリケーションが、何らかの理由で突然終了してしまうと、業務やサービスの継続性に支障をきたす可能性があります。こうした事態を未然に防ぐためには、プロセスの状態を定期的に監視し、もし見つからなければ自動で起動させるしくみが効果的です。PowerShellを使えば、このような仕組みを簡単に構築することが可能です。

PowerShellスクリプトの全体像

今回紹介するスクリプトでは、監視対象となるプロセス名と、その実行ファイルのパスを設定します。一定間隔でプロセスの存在を確認し、見つからない場合は即座に再起動を実行します。処理は無限ループで継続するため、常駐的な監視が実現できます。

$targetProcess = "SampleApp"
$exePath = "C:\Path\To\SampleApp.exe"
$interval = 60

while ($true) {
    $process = Get-Process -Name $targetProcess -ErrorAction SilentlyContinue

    if (-not $process) {
        Write-Host "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') $targetProcess が停止しています。再起動します。"
        Start-Process -FilePath $exePath
    } else {
        Write-Host "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') $targetProcess は稼働中です。"
    }

    Start-Sleep -Seconds $interval
}

スクリプトの使い方と実行方法

このコードは、.ps1ファイルとして保存した後、PowerShell上で実行することで動作します。例えば、monitor_process.ps1という名前で保存し、PowerShellを起動してそのファイルを実行するだけで監視が始まります。スクリプトは1分ごとにプロセスの有無をチェックし、見つからなければ指定された実行ファイルを起動します。

実行時の注意点と補足情報

実行ファイルによっては、PowerShellスクリプト自体を管理者権限で実行しなければ正常に起動できない場合があります。また、無限ループによって常時稼働する構造になっているため、意図的に停止させたい場合は、PowerShellウィンドウ上でCtrl + Cを押すことで中断可能です。スクリプトをスタートアップやタスクスケジューラに組み込むことで、システム起動時に自動で監視を始めるようにも設定できます。

拡張のアイデアと応用例

基本的な構成に加え、ログ出力機能を追加してプロセスの状態や再起動履歴をファイルに記録することもできます。さらに複数のプロセスを同時に監視したい場合は、配列や関数を使って管理対象を拡張することも可能です。必要に応じてメール通知やイベントログへの書き込み機能などを組み合わせれば、より本格的な監視システムとしても活用できます。

まとめ

PowerShellを使えば、特定のプロセスを定期的に監視して自動で復旧させる仕組みを簡単に構築できます。業務ツールやバックグラウンドアプリケーションの安定稼働を確保するための手段として、このようなスクリプトは非常に有効です。再起動処理が必要な場面がある場合には、ぜひ導入を検討してみてください。