もし、不在時に電算室が停電になったら・・・。
UPSがあるので自動でシャットダウンするのでいいのですがやはり心配です。
そこで、停電になったらメールでお知らせするプログラム(スクリプト)の紹介です。
スクリプトはVBS。いろんな機能を寄せ集めたのでロジックに統一性がありませんがご了承ください。
まずは用意するもの
UPS:インターネットルーターの電源を確保します。停電でルーターも切れてしまってはメール通知できません。
ノートパソコン:AC駆動もバッテリー駆動もできるやつ。バッテリーも満充電にしておきましょう。
ノートパソコンは、休止状態やスリープ状態にならないようにしておきます。
以下のスクリプトをメモ帳に記述し、Power.vbs (好きな名前でいいです。)で保存します。
適当なフォルダに入れておき、vbsを実行します。
内部で動きっぱなしになります。
AC駆動になったりバッテリー駆動になったりした時点でログ(同じフォルダ内にPower.logが作成されます)に書き込まれ、
かつメールで通知します。
以下、ロジック。
--------------------------
'PC名前取得
Dim objNetwork,CmpName
Set objNetWork = WScript.CreateObject("WScript.Network")
CmpName = objNetWork.ComputerName
Set objNetWork = Nothing
'始まりのログ出力
Call SysWriter(CmpName & " Watching Start", "Power.log")
Set colMonitoredEvents = GetObject("winmgmts:")._
ExecNotificationQuery("Select * from Win32_PowerManagementEvent")
Do
Set strLatestEvent = colMonitoredEvents.NextEvent
'Wscript.Echo strLatestEvent.EventType
If strLatestEvent.EventType = 10 Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
Set colItems = objWMIService.ExecQuery("Select * From BatteryStatus Where Voltage > 0")
For Each objItem in colItems
'テスト用 Wscript.Echo Date() & " " & Time() & ": " & "On AC Power: " & objItem.PowerOnline
Call SysWriter("On AC Power: " & objItem.PowerOnline, "Power.log")
Call SendMail(objItem.PowerOnline)
Next
Set objWMIService = Nothing
Set colItems = Nothing
End If
Loop
Sub SysWriter(str,path)
Dim fso, fi
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルを開く
'もしも存在しない場合には作成する
Set fi = fso.OpenTextFile(path, 8, true)
fi.WriteLine (Date() & " " & Time() & ": " & str) 'ログを書き込む
Set fi = Nothing
End Sub
Sub SendMail(Msg)
Set objMail = CreateObject("CDO.Message")
objMail.From = "送信元@gmail.com"
objMail.To = "送信先@gmail.com"
objMail.Subject = CmpName & " 電源確知 On AC Power:" & Msg
objMail.TextBody = CmpName & " のAC Powerが " & Msg & " となりました。確認してください。"
strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
With objMail.Configuration.Fields
.Item(strConfigurationField & "sendusing") = 2
.Item(strConfigurationField & "smtpserver") = "smtp.googlemail.com"
.Item(strConfigurationField & "smtpserverport") = 465
.Item(strConfigurationField & "smtpusessl") = True
.Item(strConfigurationField & "smtpauthenticate") = 1
.Item(strConfigurationField & "sendusername") = "送信元@gmail.com"
.Item(strConfigurationField & "sendpassword") = "Password"
.Item(strConfigurationField & "smtpconnectiontimeout") = 60
.Update
end With
objMail.Send
Set objMail = Nothing
End Sub
-------------------------------------------------------------
メール通知は、CDO.Massage を使っています。
できれば送信元はgmailがいいようです。hotmail(livemail)やyahoomailでも試してみましたが、
うまくいかず、今回はgmailで新規に取得しました。
これを作っちまったということは、停電通知のメールが来たら馳せ参じなくてはいけないということですね(;O;)
[0回]
PR