MiracleJobLogo
エンジニアのエンジニアによるエンジニアのためのサイト
News 11/16 おすすめ情報に 『 Open date Initiative(Microsoft Ignite2018にて発表) 』 を追加しました。
会員登録するとキャリア診断やサイトに参加することができます。
あなたにおすすめな技術情報、資格、仕事などをお知らせします。

無料会員登録


パスワードを忘れた場合
LINEで送る
MiracleJobBanaLeft1
MiracleJobBanaLeft2


PowerShellスクリプトでPINGを使った死活監視
profile-img
投稿者: TMutohさん
投稿日:2018/10/12 13:49
更新日:2018/10/15 10:05
like-img
分類
技術
テクノロジー
Windows系サーバ
キャリア
運用・保守
投稿内容

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
    }
}



# ping通らないサーバーがあった場合メールを送付
if ($diedServers.Length -gt 0){
    $MessageSubject = `
        "[Alert] $($diedServers.Length) 台のサーバーから応答がありません"
    $MessageBody = `
        "以下の $($diedServers.Length) 台のサーバーから応答がありません。`n" `
        + "サーバーの稼働状況を確認して下さい。`n`n" `
        + ($diedServers -join "`n")
    Send-Warning -Subject $MessageSubject -Body $MessageBody
}


======<Test-ServerAlive.ps1>======

スクリプトの置き場所はこんな感じになります。


server.txtの中身はこんな感じ。


スクリプト実行時にServer1 ~Server7のうちServer4とServer6の応答が無い場合、下記のようなログが生成され


スクリプトで設定したメールアドレスに下記のような通知が飛びます。


あとはこれをタスクスケジューラーで定期実行するようにすればOK。

While(1)で囲んでStart-Sleepを入れればタスクスケジューラーを使わずに定期実行させることもできます。

コメント


MiracleJobBanaRight1
MiracleJobBanaRight2
MiracleJobBanaRight3