今までの要素を組み合わせてみよう
それでは、ハードディスクの空き容量監視のスクリプトとメール送信を行う部分とを組み合わせて、新しいスクリプトを作ってみましょう。
Dim Body Set objWMIService = GetObject( _ "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set objSWbemObjectCollection = objWMIService.ExecQuery( _ "Select * from Win32_LogicalDisk Where DriveType = 3") For Each objSWbemObject in objSWbemObjectCollection 'デバイスID C:などを取得する DeviceID = objSWbemObject.DeviceID 'ハードディスクのフルサイズを取得する Size = objSWbemObject.Size 'ハードディスクの空き領域を取得する FreeSpace = objSWbemObject.FreeSpace '使用率を計算する ExistPersent = 100 - FreeSpace / Size * 100 '使用率が80%以上の場合に警告メッセージを表示する設定を行う If ( ExistPersent > CDbl(80) ) Then Caution = "CAUTION!!!" Else Caution = "" End If '本文を組み立てる Body = Body & DeviceID & vbTab & Int(FreeSpace / 1024 / 1024) _ & "MB" & vbTab & Int(Size / 1024 / 1024) & "MB" & vbTab \ & Int(ExistPersent) & "%" & vbTab & Caution & vbCrLf Next Call SendMail("HDDFreespaces@wankuma.com", "naka@wankuma.com",_ "HDDフリースペース監視", Body ) Sub SendMail(FromMailAddress, ToMailAddress, Subject, Body ) '設定を作成する Dim objConfig Set objConfig = CreateObject("CDO.Configuration") 'SMTPを利用する objConfig.Fields.Item( _ "http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'メールサーバを指定する objConfig.Fields.Item( _ "http://schemas.microsoft.com/cdo/configuration/smtpserver") _ = "mail.wankuma.com" objConfig.Fields.Update 'メッセージを作成する Dim objMessage Set objMessage = CreateObject("CDO.Message") '設定を関連付ける Set objMessage.Configuration = objConfig 'From, To, Subject, Bodyなどのメールの情報を設定する objMessage.From = FromMailAddress objMessage.To = ToMailAddress objMessage.Subject = Subject objMessage.TextBody = Body 'メールを送信する objMessage.Send End Sub
ここまで読んだ方であれば、目立ったポイントは無いはずです。単純に組み合わせているだけです。
まったく同じ処理をVisual Studio 2005で実行することもできます。C#のみですがサンプルとして掲載しておきます。
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Management; using System.Net.Mail; namespace codezine4 { class Program { static void SendMail(string body) { MailAddress from = new MailAddress("HDDFreespaces@wankuma.com"); MailAddress to = new MailAddress("naka@wankuma.com"); MailMessage message = new MailMessage(from, to); message.Subject = "HDDフリースペース監視"; message.Body = body; SmtpClient client = new SmtpClient("mail.wankuma.com"); client.Send(message); } static void Main(string[] args) { using (ManagementObjectSearcher Searcher = new ManagementObjectSearcher( "Select * from Win32_LogicalDisk where DriveType=3")) { using (ManagementObjectCollection moc = Searcher.Get()) { StringBuilder MailBody = new StringBuilder(); foreach (ManagementObject mo in moc) { string DeviceID = (string)mo.Properties["DeviceID"].Value; UInt64 Size = (UInt64)mo.Properties["Size"].Value; UInt64 FreeSpace = (UInt64)mo.Properties["FreeSpace"].Value; int 利用済みパーセント= 100 - (int)((Decimal)FreeSpace / (Decimal)Size * 100); MailBody.Append(string.Format( "{0}\t{1:###,###}MB\t{2:###,###}MB\t({3:###}%)\t{4}\r\n", DeviceID, FreeSpace / 1024 / 1024, Size / 1024 / 1024, 利用済みパーセント, 利用済みパーセント> 80 ? "CAUTION!!!" : "")); } SendMail(MailBody.ToString()); } } } } }
タスクに登録しよう
さて作成したスクリプトですが、このままでは手動で起動しなくてはいけません。監視を自動化するためにタスクへ登録しましょう。
コントロールパネルの[タスク]をダブルクリックして、タスクの一覧画面を表示します(カテゴリ表示の場合は、[パフォーマンスとメンテナンス]-[タスク])。

[スケジュールされたタスクの追加]を選択します。

実行するプログラムを選択する画面で、目的のvbsファイルを[参照]から選択します。

タスクの名前と実行頻度を設定します。今回は日単位を選択します。

実行時刻を設定します。

実行ユーザー名と、パスワードを入力します。

設定されたタスクの一覧が表示されます。タスクの上で右クリックし、[タスクの実行]を選択するとすぐに実行できます。

おめでとうございます。これで自動監視が開始されました。
さいごに
いかがだったでしょうか。今回のように、いろいろな機能を組み合わせることで、簡単に自動監視プログラムを作成できます。
Visual Studioなどの開発環境が無くてもプログラムは作れますし、新しいソフトを入れるのが難しいサーバであっても標準機能だけでここまでできることが理解してもらえたのではないでしょうか。
ぜひ、WSHやWMIを使ってサーバ監視をいろいろ行ってみてください。
