- WMI Fun !! -|WMI StepWMI SampleSearchWMI Fun !! GroupsAbout WMI Fun !!
Top Page >> WMI Step >> 前のコードの説明
前のコードの説明
Topics

前回書いたコードを簡単に説明していきたいと思います。


Sample Code

前のコードを参照してください。

Comment

これからの文章を読んで行く上でこれだけは理解しておきましょう。(とはいえあまり自信はないかも。)

オブジェクト
  データを格納しつつ、実行部分も持っているようなもの。
  VBでいう変数のような物。
クラス
  設計図のようなもの。VBで言う変数の型のような物。
インスタンス
  クラスを基にして生成されたオブジェクトをインスタンスという。
  オブジェクト=インスタンスと言う捕らえ方もあるかも。
  [氏名・身長・体重]というクラスがあれば[山田太郎・180cm・70kg]という
  インスタンスが作成される。
コレクション
  インスタンスの集合体。一つのクラスからは複数のインスタンスを
  作成できるためこういったことが可能。



Dim DiskSet As SWbemObjectSet
Dim Disk As SWbemObject
Dim Locator As SWbemLocator
Dim Service As SWbemServices



各種オブジェクトを生成しています。
SWbemObjectSetとSWbemObjectはコレクションを取得・解析するために必要です。 SWbemObjectSetにはコレクションが入り、SWbemObjectはコレクションからを取り出すために必要です。
SWbemLocatorはWMIに接続するために使用します。SWbemServicesは指定したクラスを実行するために使います。
別に今回のように型を指定しなくても構いませんがVisual Basicで開発するのであれば、インテリセンスが使えますので何かと便利かと思います。



Set Service = Locator.ConnectServer


ローカルコンピュータに接続を行います。実際ConnectServerメソッドは以下のような引数があります。
ConnectServer(strServer, _
        strNameSpace, _
        strUser, _
        strPassword, _
        strLocale, _
        strAuthority, _
        iSecurityFlags, _
        objwbemNamedValueSet _
       

省略して実行しても別にかまいません。省略した場合は次のような形で実行されたことになります。

ConnectServer("Localhost","root/cimv2")

良く使われるのはstrServer、strNameSpace、strUser、strPasswordぐらいなもんです。他のマシンの情報をリモートで取得したいときはコンピュータ名、ユーザー名、パスワード(strServer、strUser、strPassword)を指定します。ちなみにユーザー名などに関してはWMIに接続する権限のあるユーザー(管理者権限ユーザー等)を指定しなければなりません。試してみると面白いと思います。他にもオプションはありますが使ったことがありません。



Set PrcSet = Service.ExecQuery("Select * From Win32_Process")


ここではWMIで定義されているクラスを指定し実行結果をコレクションとして取得しています。
今回使用したWin32_Processクラスは実行されているアプリケーションの取得が可能なクラスです。
Win32_Processクラスで取得したい内容をWQL(WMI Query Language)を使用して表記しています。見た感じはSQL文とほとんど同じですね。WQLを駆使すれば取得する情報をこの時点で絞ることも可能です。
このクラス名を別の物に変更すれば他の情報も取得することが出来ます。
例としては、

  CIM_BIOSElement
  CIM_OSVersionCheck
  CIM_Processor
  Win32_BaseBoard
  Win32_NetworkAdapterConfiguration
  Win32_Printer

といったものがあります。CIM_で始まるクラス名は、DMTF(Distributed Management Task Force)定義のクラスであることを示しています。 Win32_で始まるクラス名はMicrosoft定義のクラスです。ここに挙げたものは本当にほんの一部です。全て見てみたいならSDKもしくはMSDNを見てみましょう。



For Each Prc In PrcSet

MesStr = MesStr + Prc.Description + ":" + CStr(Prc.ProcessId) + vbCrLf

Next


取得したコレクション解析していきます。
Win32_ProcessクラスにはDescriptionプロパティ、ProcessIdプロパティが存在するためそれを利用し実行中のアプリケーションの実体(exeファイル名)とPIDを解析していきます。
もしクラスを違うものに変えた場合はそのクラスに存在するプロパティを指定しなければなりません。
このような形でWMIを使用して情報を取得していきます。
この手法を覚えればWMIを使用して情報を取得することは難しくありません。
このホームページで公開しているサンプルもこれがテンプレートになっています。

次ではWQLを活用した例と各クラスに用意されているメソッドの使い方を説明します。


WMI を本で勉強したい方へ。 Windows PowerShellインアクション を読んでみては?
なかなか WMI のことが乗っている書籍は少ないですが…管理系業務に係る方には楽しめるかも?
パソコンで目が疲れたら、ブルーベリーアイ
『ブルーベリーアイ』1粒中ビルベリーエキス160mg【楽天シニア市場】
 ^ Copyright(C) 1997-2006 とお All rights reserved. <<