見出し画像

WindowsServer2019でSQLサービスが起動しているかをPowershellスクリプトでチェックしてみた。

WindowsServer2019が再起動したときに、ちゃんと開始できれば、問題ないのですが、なかなか、うまく開始できずに、SQLサービスが止まっているときがあります。その時に、起動するPowershellスクリプトを考えてみた。

スクリプトのフォルダを c:\pschk

ログファイルを保存するフォルダを c:\pschk\log

Powershellのスクリプト名を sql_service_chk.ps1 として、その内容は、

# サービス名(表示名ではない)を並べて(配列)で列挙する
# Windows2019 SQLExpress の場合
$services = @('MSSQL$SQLEXPRESS','SQLTELEMETRY$SQLEXPRESS','SQLWriter')

# ログファイルが保存されているパス
$filePath = 'C:\pschk\log'

# ログは、5日間保存
Get-ChildItem -Path $filePath -Recurse | Where-Object{$_.LastWriteTime -lt (Get-Date).AddDays(-5)} | Remove-Item -Force -WhatIf

# ログファイル名を生成
$date = Get-Date -Format "yyyyMMdd_HHmm"
$logfileNG = ( Join-path $filePath $date )+"_NG.txt"
$logfileOK = ( Join-path $filePath $date )+".txt"

# サービスが停止しているか確認
foreach($service In Get-Service $services | Where-Object {$_.status -match "^Stopped$"}){
 #サービスが停止している場合の処理 、_NG.txtのログファイルに書込。
	echo $service >> $logfileNG
	Start-Service $service
}

# ログファイルに書込。
Get-Service $services | Format-Table -Property DisplayName, Status > $logfileOK

スクリプトを設置後、タスクスケジューラーの設定を検討してみる。再起動後、しばらく時間をおいて、サービスのチェックできればいいと思うんですが、うまく安定して動かないとダメだなあ。その時は、定期的にチェックすることも検討しておこう。今回は、再起動後、1時間したらチェックするように設定してみる。

管理者権限でないとサービスの起動ができないので、特権で実行する。

画像1

トリガーは、スタートアップ後、1時間後としています。

画像2

プログラム/スクリプト(P)は、Powershellとして、

%Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe

引数の追加(オプション)(A)は、

-ExecutionPolicy Bypass C:\pschk\sql_service_chk.ps1

画像3

あとの項目は、変更していません。


この記事が気に入ったらサポートをしてみませんか?