システム管理は楽ですか? (前編) ~ Windows Management Instrumentation ~

Koji Kumagai (熊谷 恒冶)

July 30, 1999

サンプルファイル (Zip形式 koj990730.zip 644B)

はじめに

ちょうどこのコンテンツが公開されたころ横浜ではTech・Ed 99 YokohamaのWMI解説セッション ([1-312]: 管理プラットフォーム Windows Management Instrumentation (WMI)の解説と管理アプリケーション) がはじまっているでしょうか。今回のコラムはTech・Ed 99 YokohamaのセッションであるWMIの解説に連携したコラムです。Tech・Ed 99 Yokohamaに参加していない方にほんの少しだけWMIの面白さについてお話してみようと思います。当然Tech・Ed 99 Yokohama参加者の方も復習として役にたつと思いますのでどうぞご覧下さい。

WMIとは?

今までシステム管理者は自分が管理しているマシンやネットワークデバイスの情報を参照、操作が必要な場合は、その機能を提供する様々なツールを利用 していました。OSやネットワーク機器にはなから添付されているツールで足りなければサードパーティーから提供されているツールを購入していました。ま た、様々なリソースの管理はその情報を取得するためのプロトコル、アプリケーションインターフェース、情報を管理するインフォメーションモデルが違うため それぞれに対応する管理ツールを個々に利用しています。(図1)またディスクの空き容量などちょっとした情報の取得にも管理ツールを利用する必要がありま した。みなさんも実感されていると思いますがこれらの作業はあまり楽なものではなかったはずです。

WMIはこの問題を解消するために提供されたものであり、今までの管理体系をまとめ、それらに透過的にアクセスするインターフェースをユーザーに提供します。(図2)

図2からわかるようにWMIは今までの管理システムを置き換えるものではありません。今までの管理システムをサポートするためプロバイダが提供され ます。例えばSNMPとMIBをサポートするSNMPプロバイダ、Windows上のリソース情報をサポートするWin32プロバイダなどが提供されるわ けです。さらにこのプロバイダはサードベンダーが開発可能であり、アプリケーション単位(例えばSQL Server固有の情報など)のプロバイダを作成することでさらに多くの情報をサポートできるようになります。WMIではこのプロバイダがサポートする情 報の取得操作を行うインターフェースを公開しており、管理アプリケーション開発者やシステム管理者はこのインターフェースを用いて情報の取得、操作を行い ます。WMIのインターフェースからSNMPの情報やその他のデバイス、プロセスの情報を透過的に取得できるわけです。特にシステム管理者から見た場合、 WMIはWindows Scripting HostやActive Server Pagesからも利用できるためちょっとした情報の取得、管理を行うツールをスクリプトベースで組めることになります。これはちょっと興味が湧くのではな いでしょうか?

WMIを使ってみましょう

それではさっそくサンプルを使ってみましょう。

このサンプルはWebベースでマシン上のディスク情報を参照するものです。大雑把に言ってしまえばASPからWMIのインターフェース経由でディス ク情報を取得し、HTML化することでブラウザからディスクの空き容量などの参照を可能とします。動作環境はWindows 2000 Serverで稼動させています。サーバー上ではInternet Information Service 5.0が動き、そこで稼動するコンテンツとしてsample.aspを利用します。IISで仮想ディレクトリを構成し、そこにsample.aspを登録 してください。また事前準備としてセキュリティーの設定が必要です。先ほど解説しましたがWMIは様々なリソースの操作ができてしまいます。これはセキュ リティーの観点から見るとひじょうに危うい一面を持っています。そのため、あたりまえのことですがWMIを利用するための認証、許可を必要とします。そこ でIISにアクセスするクライアントの認証設定を行います。この設定はIISの管理ツールから仮想ディレクトリを右クリック->コンテンツのプロパ ティーを開く->ディレクトリセキュリティータブの選択->匿名アクセス及び認証コントロールボタンのクリック->匿名アクセスの チェックを外す、以上の操作を行ってください。これで準備は終了です。

設定終了後にブラウザからこのコンテンツにアクセスしてみてください。以下のような表示がなされるはずです。(図3)

図3

この例ではFDとHD、CDがそれぞれマシンにセットされており、各々の空き情報が表示されています。この状態でFDとCDを抜くとどうなるでしょう?抜いた状態でリロードしたのが次の図です。(図4)

図4

今まで表示されていたAとDドライブの情報が表示されなくなりました。これはFDとCDを抜いたせいで各ドライブのインスタンス情報が変わったからです。

このようにWMIを使うことでシステムデバイスの情報をはじめネットワーク、プロセスなど様々な情報をWSHやASPから取得、操作できるわけです。

WMIアプリケーションを書いてみましょう

さて次は今紹介したサンプルのコードを用いてWMIアプリケーションの開発を説明してみましょう。ここではsample.aspのWMIに関わるところだけど抜粋してみました。それ以外のコードについては ASPに関するコラムなども他にありますのでそちらをご覧下さい。

<%
    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    Set Service = locator.connectserver ()

最初の二行ではWMIのサービスへの接続を行っています。SwbemLocatorオブジェクトのcinnectserverメソッドを用いる事により SwbemService Objectを取得します。このSwbemService ObjectがWMIオブジェクトの取得、削除などWMIのサービスを提供します。

 

if Err = 0 then
        Set Disk = Service.Get ("Win32_LogicalDisk")
        Disk.Security_.impersonationLevel = impersonate
        Set Disks = Disk.Instances_
    end if
%>

次のステップでは情報取得操作のターゲットとなるオブジェクトを取得します。これは先に取得したSwbemService ObjectのGetメソッドにてターゲットのクラス(ここではロジカルディスクの情報をあらわすWin32_LogicalDisk)を指定することで 可能となります。

さて、ここまでターゲットのオブジェクトを取得できたわけですが、あくまでもWin32_LogicalDiskオブジェクトを取得したにすぎません。実体の情報はこのオブジェクトのインスタンスを生成する必要があります。

このように考えてください。ディスクを管理するにはそのディスクがどのような情報を管理するかなどの枠組みを定義しなくてはなりません。ディスクで 言えばドライブ名やサイズ、空き容量などの情報があります。この枠組みがWin32_LogicalDiskオブジェクトです。次にマシンに接続されてい るFDやハードディスクディスクの情報はこのオブジェクトで定義された情報の実体を持っています。この実体の情報を取得するのがオブジェクトのインスタン ス生成なのです。(図5)

サンプルではこのインスタンス生成をSwbemService ObjectのInstances_メソッドで行っています。インスタンス生成前に設定している Security_.impersonationLevelは、そのインスタンス生成に関して認証を行うレベルを定義しています。今回の設定ではIISが 稼動しているマシン上の情報取得を行う設定になっています。これでやっとWin32_LogicalDiskオブジェクトのインスタンス生成ができまし た。

<% for each DiskInstance in Disks %>
    <TR>
    <TD><% =DiskInstance.Name %></TD>
    <TD><% =DiskInstance.VolumeName %></TD>
    <TD><% =DiskInstance.VolumeSerialNumber %></TD>
    <TD><% =DiskInstance.Size %></TD>
    <TD><% =DiskInstance.FreeSpace %></TD>
    </TR>
<% Next %>

ここでは先に生成したインスタンスのプロパティーを表示しています。インスタンスは複数存在する可能性があるため for each でインスタンスが存在する間、ループさせます。

ここで表示させているのは、以下の5つのプロパティーです。

Nameプロパティー: ドライブ名をあらわします
VolumeNameプロパティー: ボリューム名をあらわします
VolumeSerialNumberプロパティー: シリアル番号をあらわします
Sizeプロパティー: ドライブのサイズをあらわします
FreeSpaceプロパティー: ドライブの空き容量をあらわします

当然これら以外のプロパティーも存在するので必要に応じて表示させるようにすればよいでしょう。また、このサンプルではプロパティーの表示だけです が、インターフェースによってはメソッドを公開しているものもあります。例えばシステムで稼動しているプロセスを表すWin32_Processオブジェ クトではCreateやTerminateメソッドがあり、読んで字のごとくプロセスの生成や削除が可能です。これらWMIで使用するスキーマーは https://www.microsoft.com/systemcenter/default.aspx から参照することができます。

おわりに

いかがでしょうか。ほんの数行のコーディングでディスク情報を取得できてしまいました。これに数行付け加えることでディスクの操作も出来ますし、サ ンプルを一部変更すれば他の情報を参照することも可能です。またこのコードをWSHへ移植すればスクリプトから情報の取得、操作ができます。システム管理 者の方はWMIを習得することで管理作業に付帯する情報を容易に所得できるようになります。覚えることはほんの少しです。そろそろWMIとスクリプトに手 をつけてみてはいかがでしょうか?

このコラムはもう一回続ける予定です。次はもう少し先にすすんでスクリプトからのプロセス削除などにも手をそめようかと思っていますのでご期待ください。


Koji Kumagai: マイクロソフトのテクニカルエバンジェリストとして、デベロッパー向けにマイクロソフトのネットワーク技術等の啓蒙活動をしています。現在注目しているのは Active Directory や WMI をはじめとした統合管理技術です。

 

ページトップへ