ActiveXPosh

InfoQの記事で「ActiveXPosh」というのが紹介されていた。

これはVBScriptJScriptからPowerShellを呼び出せるようにしたもの。やってることはPowerShellをCOMでラップしてCOM対応言語から呼び出せるラッパーを作ったということなのかな。

ということはVB6やDelphiとかからも呼び出せるのね。

とりあえず使ってみた。ダウンロードは以下のリンクから

使ってみる

「posh.vbs」というファイルを作って、以下のコードを記述する。

posh.vbs
Set objPosh = CreateObject("SAPIEN.ActiveXPosh")
' プロファイルを読み込む場合はvbTrueを指定する
objPosh.Init vbFalse

objPosh.Execute "dir"

コンソールで「cscript」を使ってスクリプトを実行すると、以下のように出力される(cscriptを使っているのはVBScriptからの出力をコンソールにリダイレクトするため)。

PS > cscript posh.vbs //nologo


    ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2007/07/11     15:10            Documents and Settings
d----        2008/02/13     16:24            Inetpub
d-r--        2008/07/24      8:46            Program Files
d----        2008/06/24     10:35            temp
d----        2008/07/15      9:03            WINDOWS
-a---        2006/10/04     19:02          0 AUTOEXEC.BAT
-a---        2006/10/04     19:02          0 CONFIG.SYS
-a---        2008/01/24     10:54          0 _dummy

一見するとPowerShellと同じように見えるけども、ここで出力されているのはもちろんオブジェクトではなくてただの文字列

だから、この出力結果をパイプでつないで、

cscript posh.vbs //nologo | % { $_.Name }

なんてのはできないので注意!!普通に文字列として扱うような処理ならできるけどね。

いまいちこれを使う場面がイメージできない*1けどネタとしてはおもしろい。

*1:PowerShellがインストールされていないと使えないのなら素直にPowerShell使えよと