PythonでWMIの内部を覗く

Windowsといえば、ブラックボックスだのと言われることも多いかと思いますが、
その中でもとりわけ見えてこない項目としてWMIがあります。
なにせMS最大の秘密とも言われるようですので。

WMI(Windows Management Instrumention)の詳細な説明は下記のサイトに譲りますが、
WBEMのMS実装版で、Windowsの管理情報にアクセスして情報を取得したり
変更することが可能なインターフェイスを提供してくれます。

Windows Management Instrumentation (WMI) の概要
WMI スクリプト入門 : 第 1 部

突き詰めると、WMIを通してWindowsの様々な情報を取得することが可能であり、
管理者としてはお世話になることもあるかと思います。

ですが、WMIでどのような情報を取得できるのか?
というところが漠然としていたので、
Pythonで覗いてみましたというのが今回のお題です。

具体的に今回やったことは、
PythonからWMIを叩いて取得したオブジェクトの中身を見ることで、
どのような情報を取得できるのかを確認したところまでです。

Pythonには様々なモジュールがありますが、下記を利用しています。

pypi.python.org

下記のようにコマンドを発行することで、WMIインターフェイスへの入り口を作れます。

import wmi
c = wmi.WMI()

この「c」の中にWMIの情報が詰まっているのですが、
それを覗くのにPythonのinspectモジュールを利用してみました。
これは、モジュール内のクラスの一覧などを出力してくれるモジュールです。
これにより「c」の内部を覗いてみます。
inspectモジュールを使って、モジュール内のクラス一覧を得る - Mattari Diary

import inspect
inspect.getmembers(c)

記載しませんが、大量に出力されます。
_classesの部分が、我々としては大事です。
どのclassの値を参照すれば、我々が望んでいる情報を取得できるかが決まりますので。
例えば、「Win32_Service」というclassがあるかと思います。
このclassからどんな情報が取れるのかと気になったら、
更にこのclassの内部を検索してやればよいのです。

inspect.getmembers(c.win32_service)

こうやっていけば、どの情報を取得できそうかあたりがつけられるかと思います。
このレイヤーまで掘れば、変数名からどのような情報が得られそうかというのが想像できます。

参考:
WMI Fun !! 〜 WMI (Windows Management Instrumentation) に興味がある方・システム管理者必見! 〜
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394582(v=vs.85).aspx


この本が気になる。WMIというとあんまり情報がなく。。