- blogs:
- cles::blog
2011/12/26

続・Windows標準機能だけで、ディスクの残容量を監視する



以前にパフォーマンスモニタとタスクを使ってディスク容量を監視する方法をまとめたのですが、これには SMTP Auth に対応していないという致命的な問題があったので、何とかするべく調べてみたところ VBS を使って実現するのが良さそうだったので、サンプルを拝借して自分なりにまとめてみました。この機会に CDO で任意のヘッダを設定する方法もわかったのでいい勉強になりました。
こちらは vbs なので、やろうと思えばいろいろとカスタマイズが効きますからプログラムが得意な人にはオススメです。
† 開発したスクリプト
設定項目については適宜書き換えてください。
メールは Gmail 経由で送ることを想定していますが、それ以外でも送れるはずです。
DiskUsageAlert.vbs
Option Explicit
Dim WarningCount
Dim ServerName
Dim MailSubject
Dim MailBody
Dim UsageThreshold
Dim SmtpHost
Dim SmtpPort
Dim SmtpSSL
Dim SmtpUser
Dim SmtpPassword
Dim SmtpFrom
Dim SmtpTo
ServerName = "Example Server"
UsageThreshold = 90
SmtpFrom = "DiskUsageAlert <from@example.jp>"
SmtpTo = "to@example.jp"
SmtpHost = "smtp.gmail.com"
SmtpSSL = True
SmtpPort = 465
SmtpUser = "from@example.com"
SmtpPassword = "from_at_example_com_password"
MailSubject = "[Warning] ディスク容量監視アラート(" & UsageThreshold & "%超過): " & ServerName
WarningCount = 0
Dim objWMIService
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Dim objSWbemObjectCollection
Set objSWbemObjectCollection = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3")
Dim objSWbemObject
For Each objSWbemObject in objSWbemObjectCollection
Dim DeviceID
Dim Size
Dim FreeSpace
Dim ExistPersent
Dim Caution
DeviceID = objSWbemObject.DeviceID
Size = objSWbemObject.Size
FreeSpace = objSWbemObject.FreeSpace
ExistPersent = 100 - FreeSpace / Size * 100
If ( ExistPersent > CDbl(UsageThreshold) ) Then
Caution = "CAUTION!!!"
WarningCount = WarningCount + 1
Else
Caution = ""
End If
MailBody = MailBody & DeviceID & vbTab & Int(FreeSpace / 1024 / 1024) _
& "MB" & vbTab & Int(Size / 1024 / 1024) & "MB" & vbTab _
& Int(ExistPersent) & "%" & vbTab & Caution & vbCrLf
Next
If ( WarningCount > 0 ) Then
Call SendMail(SmtpFrom, SmtpTo, MailSubject , MailBody )
End IF
Sub SendMail(FromMailAddress, ToMailAddress, Subject, Body )
Dim objConfig
Set objConfig = CreateObject("CDO.Configuration")
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl") = SmtpSSL
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpHost
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort
'ユーザー認証
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/sendusername") = SmtpUser
objConfig.Fields.Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword") = SmtpPassword
objConfig.Fields.Update
Dim objMessage
Set objMessage = CreateObject("CDO.Message")
Set objMessage.Configuration = objConfig
objMessage.BodyPart.Charset = "utf-8"
objMessage.Fields.Item("urn:schemas:mailheader:Precedence") = "bulk"
objMessage.Fields.Item("urn:schemas:mailheader:X-Mailer") = "CLES MailNotice vbs"
objMessage.Fields.Update
objMessage.From = FromMailAddress
objMessage.To = ToMailAddress
objMessage.Subject = Subject
objMessage.TextBody = Body
objMessage.Send
' If Err.Number = 0 Then
' WScript.Echo "メールを送信しました。"
' Else
' WScript.Echo "メールの送信に失敗しました。" & _
' "(" & Err.Description & ")"
' End If
End Sub
† 飛んでくるメール
起動させたときに閾値を上回る領域が存在すれば下記のようなメールが飛んできます。
あとはタスクに登録して、一定時間ごとにまわしてやればOKです。
Subject: [Warning] ディスク容量監視アラート(90%超過):Example Server
From: DiskUsageAlert <from@example.jp>
To: to@example.jp
F: 5939MB 49999MB 88%
G: 13535MB 903656MB 98% CAUTION!!!
M: 2003878MB 3815248MB 47%
† 参考
・スクリプトとタスクによるサーバ監視の自動化(3/3):CodeZine
・VBScript Tips (Tips0203)
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4666
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
toby
(2017/04/12 15:03)
<%HatenaAuth()%>
ありがとうございます。
このようなvbs を探しておりました。
もしご了解をいただけるようであれば、
小生のサイトで紹介させていただいてもよろしいでしょうか??
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112143)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110786)
3 . 年次の人間ドックへ(110380)
4 . 2023 年分の確定申告完了!(1つめ)(109927)
5 . 三菱鉛筆がラミーを買収(109827)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110786)
3 . 年次の人間ドックへ(110380)
4 . 2023 年分の確定申告完了!(1つめ)(109927)
5 . 三菱鉛筆がラミーを買収(109827)
cles::blogについて
Referrers