WMI Fun !! 〜 WMI に興味がある方・システム管理者は必見です! 〜
 WMI Step|WMI Sample|WMI Reference|WMI Library|Enquete|About WMI Fun !!
 My Let'snote|Personal|Insomnia|Link

WMI Fun !! > WMI Step > 前のコードの説明 (WMI のオブジェクトや WQL…)

このエントリーをはてなブックマークに追加
IT 関連情報を気軽に知りたい方へ、キーマンズネットがおすすめです
私も使っていますお勧め SIM フリースマホ ASUS Zenfone
DMM mobile なら常に格安 SIM 業界最安値水準で使えます

前のコードの説明 (WMI のオブジェクトや WQL…) - WMI Step

Topics

前回のステップで書いたサンプルコードの説明をブロックごと順番にしていきたいと思います。



Sample Code

'このサンプルコードは前回のコードと同じです。
 
Private Sub Command1_Click()

Dim PrcSet As SWbemObjectSet
Dim Prc As SWbemObject
Dim Locator As SWbemLocator
Dim Service As SWbemServices
Dim MesStr As String

Set Locator = New WbemScripting.SWbemLocator
Set Service = Locator.ConnectServer

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

For Each Prc In PrcSet

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

Next

MsgBox "実行中アプリケーションです" & vbCrLf & vbCrLf & _
        MesStr & vbCrLf & "ですよ。"

Set PrcSet = Nothing
Set Prc = Nothing
Set Service = Nothing
Set Locator = Nothing

End Sub



Comment

まず、これからの下記文章を読んで行く上でこれだけは用語として理解しておきましょう。(とはいえあまり説明に自信はないかも…間違っていたら指摘して下さい。)

・クラス
  定義・設計図のようなもの。例えば VB で言う変数の型のようなもの。
・オブジェクト
  クラスが使用できる状態になったもの。
  データを格納しつつ、実行機能も持っているようなもの。
  VBでいう変数のような物。
・インスタンス
  クラスを基にして生成したコピーをインスタンスといいます。
  なのでオブジェクトを作成することをインスタンス化といいます。。
  考え方によってはオブジェクト=インスタンスと言う捕らえ方もあるかも。
  例えば[氏名・身長・体重]という定義のクラスがあれば[山田太郎・180cm・70kg]という
  オブジェクトをインスタンス化して作成するという表現になりますね。
・コレクション
  オブジェクト・インスタンスの集合体。
  1つのクラスからは複数のオブジェクトをインスタンス化することが出来るため、
  このようなことが可能になります。

上記用語に関しては WMI に直接関与する用語ではありませんが、Visual Basic 等の開発言語を使用する上で様々な知らず知らず暗黙の内にオブジェクトを使用していることがあります。上記のイメージを理解しておくと開発に関して理解が深まるかもしれません。



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 Server 等データベースを触ったことがある人はピンとくるかもしれませんが、SQL 文とほとんど同じですね。WQL を駆使すれば取得する情報をこの時点で絞ることも可能です。
このクラス名を別の物に変更すれば他の情報も取得することが出来ます。
WMI クラスの例としては、

  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


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

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

次は「WMI のメソッドを使ってみよう」です。


ご意見・ご要望・ご感想をこちらのアンケートからお待ちしています
WMI に関して調べているけど探し物が見つからない…という方は Search Result から検索してみましょう!!

MCP (Microsoft Certified Professional)、 MCA (Microsoft Certified Associate)CompTIA A+
一応 MCP (Microsoft Certified Professional)、MCA (Microsoft Certified Associate)、
CompTIA A+ を所有してたりします…

- WMI Fun !! -
http://www.wmifun.net/
Microsoft 社のテクノロジーである WMI (Windows Management Instrumentation) の使い方を
Visual Basic を使ってのんびり公開しています
WMI は Windows 7 や Windows 8、Windows 10 で便利に使えますよ!
また VB や VBA、.Net (VB・C#) などの開発環境以外でも Win32/Win64 API に依存しないので WMIC や
WSH (VBS・JS)・PowerShell などスクリプト言語・コマンドラインから有効に活用が出来ます
Windows ベースの社内 IT システムに関する資産管理、アセットマネジメントや監視業務の効率化、
インベントリ情報収集系システムツール開発に WMI はお勧めです

This website is created by Toh.
Copyright(C) 1997-2016 WMI Fun !! All rights reserved.
WMI Fun !! へのリンクはご自由に…相互リンクに関するお問い合わせはアンケートページからお願いします

∧ ページの先頭へ…