SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

スクリプトとタスクによるサーバ監視の自動化

WSH/WMI/CDOを組み合わせてサーバの状況をメールで通知する


今までの要素を組み合わせてみよう

 それでは、ハードディスクの空き容量監視のスクリプトとメール送信を行う部分とを組み合わせて、新しいスクリプトを作ってみましょう。

ハードディスクの空き容量を監視してメールを送信する
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#のみですがサンプルとして掲載しておきます。

ハードディスクの空き容量を監視してメールを送信する(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を使ってサーバ監視をいろいろ行ってみてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

中 博俊(ナカ ヒロトシ)

大阪でフリーのソフトウェアエンジニア兼テクニカルライターとして日々新技術で楽しんでいる。MSMVP for C# ブログ:http://blogs.wankuma.com/naka/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/501 2008/08/21 21:10

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー