【Perl, Windows】WMIに接続する(基本編)


前回のネタについて細かく見て行こう。

そもそもWMIとは何か。

Windows Management Instrumentation – Wikipedia
http://ja.wikipedia.org/wiki/WMI

Windows Management Instrumentation(WMI)は、Windows Driver Modelへの拡張の一種で、システムの構成要素について情報収集と通知を行うオペレーティングシステムのインタフェースを提供する。

これだけではなんだかよくわからないが、要するに、OSから得られる様々な情報に対する統括的なインターフェイスだ。Windowsの状態について知りたいならばこれで全て賄えるのである。

PerlからこのWMIへのアクセスにはWin32::OLEモジュールを使う。基本的な構文はこうだ。

$wmi = Win32::OLE->GetObject( "winmgmts:/root/CIMV2" );
$items = $wmi->ExecQuery( $sql );

$sqlにはSQL(みたいな)構文が入る。例として、デスクトップに使っている壁紙のファイル名を得るプログラムを書いてみよう。

#!/usr/bin/perl
use strict;
use warnings;
use Perl6::Say;
use Win32::OLE;
my $sql = "SELECT * FROM Win32_Desktop WHERE Wallpaper != Null";
my $wmi = Win32::OLE->GetObject( "winmgmts:/root/CIMV2" );
my $items = $wmi->ExecQuery( $sql );
for my $i ( in $items ) {
    say $i->Wallpaper;
}

実行結果(Windows7での例)

wmi.png

9行目に使われている「in」はWin32::OLEによって提供される演算子で、コレクションからリストを生成してくれる。

次回、「【Perl, Windows】WMIに接続する(応用編)」へ続く。

コメントを残す