【Perl, Windows】WMIに接続する(応用編)

前回はWMIへの接続の基本を書いた。

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

しかし、この構文ではローカルのPC、しかも現在のユーザー資格情報で接続しようとする。別の資格情報を使ったり、他のPCの情報が欲しいときは次の構文を使う。

$locator = Win32::OLE->CreateObject( "WbemScripting.SWbemLocator" )
$wmi = $locator->connectserver( "サーバー名", "root/CIMV2", "ユーザー名", "パスワード" );

前回の例(デスクトップの壁紙のファイル名を得るスクリプト)を書き直してみよう。

Continue reading

【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(みたいな)構文が入る。例として、デスクトップに使っている壁紙のファイル名を得るプログラムを書いてみよう。

Continue reading

【Perl, Windows】使っているコーデックの一覧を得る

WMIを使ってコーデックの一覧を得るスクリプト。かなり煩雑で独自表記っぽくなってるけど、これもMooseの勉強の一環ってことで。コマンドプロンプトからperl codec.plとすると次のような結果が得られる。

C:\> perl codec.pl
No.1
Manufacturer: Microsoft Corporation
Name: C:\Windows\system32\MSRLE32.DLL
Path: \windows\system32\
Version: 6.1.7600.16490
Caption: c:\windows\system32\msrle32.dll
Drive: c:
Extension: dll
FileType: Application Extension
Group: Video
CreationDate: 2010/02/11 16:41:07
InstallDate: 2010/02/11 16:41:07
LastModified: 2009/12/19 18:47:46

No.2
Manufacturer: None
Name: C:\Windows\system32\FF_ACM.ACM
Path: \windows\system32\

    〜以下省略〜

表示する情報を制限したり、管理者権限のあるユーザー名とパスワードがわかれば、他のPCにアクセスしてリストを取り出すこともできる。

C:\> perl codec.pl --server コンピューター名 --user ユーザー名 --password パスワード --prop Name --prop Manufacturer
No.1
Name: C:\Windows\system32\MSRLE32.DLL
Manufacturer: Microsoft Corporation

No.2
Name: C:\Windows\system32\FF_VFW.DLL
Manufacturer: None

No.3
Name: C:\Windows\system32\FRAPSV64.DLL
Manufacturer: Beepa P/L

    〜以下省略〜

使っているテクニックについては、日を改めて説明しよう。(一度に書いたらネタが無くなるしね!)

Continue reading

特定のメール(Outlook)を自動的に削除するスクリプト

社内で「特定人物向けのメールを全員に送信しちゃった! 何とかして!」と言われたときに作ったスクリプト。グループポリシーを使ってPCにログオンしたときに起動するように設定することを想定している。Outlookを自動的に起動して受信メールをチェックし、条件に合うもの(今回は特定の語句を題名に含むもの)を削除する。

Continue reading