PowerShellのみを使ってサーバーの死活監視をしてみよう(唐突)
・やりたいこと
1. タスクスケジューラーで定期的にサーバーへのpingを実行
2. 導通確認が取れない場合、管理者アドレスにメールを送付
3. pingの成否をログに記録
・用意しておくもの
対象サーバーリストファイル
・サンプルスクリプト
======<Test-ServerAlive.ps1>======
# 対象サーバーリストのファイルを指定
$ServerList = $PSScriptRoot + "\servers.txt"
$logFile = $PSScriptRoot + "\log\" + (Get-Date -Format "yyyyMMdd") `
+ "_AliveMonitoring.txt"
# アラートメール送信用関数の作成
function Send-Warning($Subject, $Body){
Send-MailMessage `
-SmtpServer <メールサーバー名> `
-Port 25 `
-Encoding UTF8 `
-From <送信元アドレス> `
-To <宛先アドレス> `
-Subject $Subject `
-Body $Body
}
# ログ記録用関数の作成
function Out-Log($Server, $Message){
Write-Output "[$(Get-Date -Format G)][$Server] $Message" `
|Out-File -LiteralPath $logFile -Encoding UTF8 -Append
}
# 死んでるサーバーのリストを入れる配列を作成
$diedServers = @()
# サーバーリストを読み込んでTest-Connectionの結果を判定
Import-CSV -Path $ServerList |ForEach-Object {
$status = Test-Connection -ComputerName $_.Name -Quiet
if ($status -eq $True){
Out-Log -Server $_.Name `
-Message "このサーバーは生きています(^_^)"
}else{
Out-Log -Server $_.Name `
-Message "WARNING: このサーバーからの応答がありません...(>_<;)"
$diedServers += $_.Name
}
}
======<Test-ServerAlive.ps1>======
スクリプトの置き場所はこんな感じになります。
server.txtの中身はこんな感じ。
スクリプト実行時にServer1 ~Server7のうちServer4とServer6の応答が無い場合、下記のようなログが生成され
スクリプトで設定したメールアドレスに下記のような通知が飛びます。
あとはこれをタスクスケジューラーで定期実行するようにすればOK。
While(1)で囲んでStart-Sleepを入れればタスクスケジューラーを使わずに定期実行させることもできます。