WMIオブジェクトのプロパティの値を取得する

WMIでシェルを作ろうとするとまず問題なのが情報の少なさです。クラスの説明は英語のMSDNのサイトにはあります。しかし、クラス名自体を知らない場合は少しやっかいです。その場合は、クラス名であたりつける作戦を行います。WMIクラスの一覧は以下のコマンドレッドで出力できるようです。

get-wmiobject -list

かなり多いですが、単語でひっかければ目的のものが見つかるかもしれません。プロパティに関しては実際に画面に出力させて確認するのが速いと思います。しかし、プロパティの数も多い場合があります。そこで、WMIオブジェクトのプロパティの値を取得するシェルを作成してみました。

set-PSDebug -strict
# ---------------------------------------
# WMIオブジェクトのプロパティの値を取得する
# 第一引数:WMIクラス
# ---------------------------------------
Function GetWMIProperty{
    # 引数取得
    param([string]$class_name)
    
    # WMIオブジェクトの取得
    $q = "select * from " + $class_name
    $wmiobj = get-WmiObject -query $q
    
    # メンバーの取得
    $member = $wmiobj | get-Member
    
    # メンバーのタイプがPropertyだったらリストに格納
    $plist = @{}
    foreach ($m in $member){
        if ($m.membertype -eq "Property"){
            $pname = $m.name
            $plist[$pname] = $wmiobj.$pname
        }
    }
    
    # リストを返す
    $plist
}

# Win32_OperatingSystemクラスのプロパティの値を表示
GetWMIProperty "Win32_OperatingSystem"