Web サーバーで IIS サービスの状態を 15 分ごとにチェックするスクリプトを作成しました。このスクリプトを Windows タスク スケジューラでスケジュールしました。
サーバーにログオンし、正しく機能する場合はスクリプトを手動で実行します。サーバーにログオンしておらず、バッチ スクリプトでこれを実行すると、IIS が実際に稼働していても、Get-Service
クエリが返されず、サービスが再起動されます。Running
サーバーに物理的にログオンしている場合と、バックグラウンドでスケジュールされたタスクとして実行している場合で、このスクリプトの実行が異なるのはなぜですか?
スクリプトは次のように呼び出されます。C:\Scripts\powershell.exe -File verify_status.ps1 [Service param]
##############################
# Get service status
##############################
if($args[0] -ne $NULL){
$serviceName = $args[0]
$serverName = hostname
$status = (Get-Service $serviceName).Status
if ($status -ne "Running"){
sendMail "$serviceName" "$serverName"
Restart-Service $ServiceName
}else{
# Service is running, do nothing;
}
}
=====================================
編集NULL
-誰もログオンしていない状態でスクリプトが実行されると、Get-Service は a を返します。それがまったく役立つ場合。