1. tatamyiwathy

    Posted

    tatamyiwathy
Changes in title
+PowerShellでサーバーの死活監視
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,87 @@
+監視対象に定期的にPingを打って反応なければメールを送信するスクリプトです。
+イベントログにも記録します。
+
+
+
+
+
+```powershell:Check-DeadOrAlive.ps1
+
+# 監視対象
+[String[]]$addressAp = @('ホスト1','ホスト2',...)
+
+# 間隔
+$interleave=180
+
+# イベントログソース
+$eventLogSource = "DeadOrAlive"
+
+
+# メール送信
+function Send-Mail( $Subject, $Body ) {
+ $MailSv = "メールサーバー"
+ $Port = 587
+ $Encode = "UTF8"
+ $address = "メールアドレス"
+
+ $pwd = "パスワード" | ConvertTo-SecureString -AsPlainText -Force
+ $cred = New-Object System.Management.Automation.PSCredential $address,$pwd
+
+ Send-MailMessage `
+ -To $address `
+ -From $address `
+ -SmtpServer $MailSv `
+ -Credential $cred `
+ -Encoding "UTF8" `
+ -Port $Port `
+ -Subject $Subject `
+ -Body $Body
+}
+
+# イベントログソース作成
+if ([System.Diagnostics.EventLog]::SourceExists($eventLogSource) -eq $false){
+ New-EventLog -LogName Application -Source $eventLogSource
+}
+
+
+$dead_or_alive = @{}
+for($i = 0; $i -lt $addressAp.Count; $i++) {
+ $dead_or_alive.Add($addressAp[$i],'alive')
+}
+
+# ping
+while(1){
+ for($i = 0; $i -lt $addressAp.Count; $i++) {
+ # Pingを実行します。
+ $pingAlive = @(Test-Connection -ComputerName $addressAp[$i] -Quiet)
+
+ if ($pingAlive -eq $True) {
+ $message = "Check-DeadOrAlive SUCCESS:" + $addressAp[$i]
+ echo $message
+ Write-EventLog -LogName Application -Source $eventLogSource -EventId 1 -Message $message
+ $dead_or_alive[$addressAp[$i]] = 'alive'
+ } else {
+ if($dead_or_alive[$addressAp[$i]] -eq 'alive'){
+ # ログを記録する
+ $message = "Check-DeadOrAlive ERROR:" + $addressAp[$i]
+ echo $message
+ Write-EventLog -LogName Application -Source $eventLogSource -EventId 1 -Message $message
+ # メールを送信する
+ $subject = $addressAp[$i] + " IS DEAD"
+ [String]$date = Get-Date
+ $body = $date + "`r`n" + $subject + "`r`nfrom ad.vanpool.lan"
+ Send-Mail $subject $body
+ $dead_or_alive[$addressAp[$i]] = 'dead'
+ }
+ }
+ }
+
+
+ # 待機
+ Start-Sleep -s $interleave
+}
+
+# 終了
+Write-EventLog -LogName Application -Source $eventLogSource -EventId 1 -Message "Check-DeadOrAlive: Terminated"
+
+```