PowerShell ガイド:COM

COMはComponentObjectModelの略です。
コンポーネントをオブジェクトで提供するかたち。

コンポーネントは部品ですね。
それをオブジェクトとかいって、これまた微妙ですが、
オブジェクトはnewできてメソッドやプロパティをいったメンバをもつもののことです。
インターフェイスを定めましょうっていうこと。

WindowsはCOMの集合体であると表現するひともいます。
ほんとにそうなのか、微妙かもしれませんが、結構、合っているのではないかと思います。
登録してしまいさせすればnewして使えるんですから、拡張性を支える大きな機能です。

COMはコンピュータにクラスIDを登録して使うものです。
レジストリでいうと、HKEY_CLASSES_ROOTのclsid以下にたくさんのGUID(GloballyUniqueIDentifier)があります。

これらには、ProgIDというのが定義されているものもあり、プログラムIDでnewすることも可能だったりします。

早速使ってみましょう。

$a = New-Object -Comobject InternetExplorer.Application;
while($a.busy){[System.Threading.Thread]::Sleep(1000)}
$a.Visible = $true;
$a.Navigate("http://www.google.co.jp/");
while($a.busy){[System.Threading.Thread]::Sleep(1000)}
$a.quit();

IEのCOMをつかってgoogleホームページにアクセスします。
$aはIEのCOMオブジェクトで、Navigate()というメソッドをもっているわけです。
(Get-Memberしてみましょう)

$a = New-Object -Comobject Excel.Application;
$a.visible = $true;
$a.displayalerts = $false;
$book = $a.workbooks.add();
$book.worksheets.item(1).name;
$book.close();
$a.quit();

今度はエクセル。
ブックを新規作成して1枚目のシートのシート名を出力しています。
(Get-Memberするともっとおもしろい)

COMは実行するコンピュータにレジストリ登録されていなければ利用できません。
プログラムIDが提供されているものは上記のようにプログラムIDで生成できます。
生成の仕方は、
New-Object -Comobject [プログラムID];
です。