Ryo Nishiya (西谷 亮)
October 22, 1998
.gif)
サンプルファイル
(自己解凍形式 c981021.exe 27KB)
はじめに
いま台風10号が接近してきている状況です。秋は、やはり台風が多い季節ですね。せっかく、紅葉してきれいな木々もみんな吹き飛ばされて、徐々に冬へと向かっていくのでしょう。ところが、今回の台風10号は、いつもとは違って、なにやら、巨大な上に勢力も強いらしく、せっかく、今、身に付けている知識が、思わず吹き飛ばされてしまうような勢いのようです。「そりゃ困る」と危惧していたおり、ついに、この
SBN(Site Builder
Network)のサイトで連載をすることになりました。それでは、ということで、風に飛ばされてはあまりにもったいない知識であろう、「Microsoft
Windows Scripting
Host」について、4回シリーズで連載することになったわけです。(もちろんこれで終わりというわけではなく、4回シリーズが終わっても別の話題でこの企画は続いていきます。)
さて、皆さんは、、"Microsoft Windows Scripting Host"
を使っていらっしゃいますか?
どのぐらいの方がこの強力な新機能を知っているでしょうか。
この機能は、よく WSH
などという形で略されている機能で、真剣に説明するならば、「Windows9x や WindowsNT などの 32Bit Windows
プラットホーム上において動作する ActiveX スクリプティングエンジン用のホストである」となります。要は、Microsoft Visual Basic
Scripting Edition(VBScript)と JScript で記述されたコードをネイティブで実行することができるというわけです。
では、この
Microsoft Windows Scripting Host について、VBScript をベースに話を進めていくことにしましょう。
WSH の導入
とにかく、WSH を動かすところからはじめていきましょう。
さて、WSH
のコードを記載していく際には、通常の言語製品などと異なって、コンパイルなどの作業は発生しません。単純にテキストデータとしてスクリプトを記載しておくだけでいいのです。そして、テキストデータとして、作成されたソースコードは、決まった拡張子で保存しておくことによって、そのスクリプトを動作させることができるようになっています。その拡張子は、そのプログラムで使用されているスクリプト言語によって決定されるようになっています。たとえば、VBScript
を利用しているのであれば、拡張子は、"*.vbs" となり、JScript なのであれば、"*.js"
となります。(ちなみに、この2つ以外の言語は利用できませんのであしからず...)
まずは、下記のソースを見てほしい。
'******* Hello.vbs *******
MsgBox "Hello, world.",,"WSH Sample"
'******* End of File *******
一行しかないこのソースコードを "Hello.vbs" という名称で保存して、ダブルクリックするなどして実行してみましょう。すると、図1のように表示されます。このスクリプトを解説するのであれば、「MsgBox
関数を用いて、画面上にメッセージボックスを表示した」となりますね。
.gif)
図 1 |
WSH の場合、基本的にソースファイルに書かれた内容を上から順に実行するといった動作をします。Visual Basic
などのようなイベントドリブンという概念においてのプログラミングは行いません。とはいえ、スクリプトの中にサブプロシージャやファンクション(関数)を実装させることもできますので、ご安心のほどを。実際にプログラミングを行っていく際の方法として、イメージ的なものを言ってしまうのであれば、MS-DOS
のころに存在したバッチファイルのようなものと考えるとわかりやすい方も多いかもしれませんね。ところが、WSH
の本当の利点を言うと"バッチ"としての利用のみならず、その環境のインストールされているオブジェクトの再利用と WSH
自身で持っているオブジェクトの利用にあるのです。
たとえば、Windows98 の環境であれば、Windows98
のセットアップされたディレクトリの中にある Samples ディレクトリを参照してみてください。WSH
ディレクトリの中にいくつかファイルがあるのを確認できるかと思います。(セットアップ時のオプションによっては、この場所にコピーされていないこともあるので、ご注意ください。)ここで、"Chart.vbs"
を実行してみると、(Microsoft Excel が、あらかじめセットアップされているのが前提ですが、)Microsoft Excel
が自動的に起動し、シート上に作成されたグラフがぐるぐると回転するではないですか。(図2)これは、WSHに実装されている機能を利用して、Microsoft
Excel の機能を呼び出すという作業がスクリプトとして記述されているだけなのです。
このようなことができるものは、Microsoft Excel
に限ったことではありません。開発者が、Visual Basic や Visual C++ といった開発言語製品を用いて作成した COM(Component
Object Model)コンポーネントを WSH から呼び出して実行するといったことだって、当然できます。これらの機能を有効に利用していくためには、WSH
において実装しているオブジェクトの構成要素をあらかじめ把握しておく必要があるのは言うまでもないことです。ここからが本題です。次に WSH
のオブジェクトモデルの構成を見ていくことにしましょう。
.gif)
図2-1 | .gif)
図2-2 |
WSH のオブジェクトモデル構成
WSH
では、大きな流れに沿ってみると2つのインターフェイスを公開しています。そのひとつは、「スクリプトの実行とトラブルシューティング」、そしてもうひとつが、「それらの支援機能」という形です。「スクリプトの実行とトラブルシューティング」とは、実際のスクリプトの実行に関連するプロパティとメソッドのこと指します。これによって、スクリプトから
WSH
の操作や、画面上へのメッセージの表示、オブジェクトの操作などを行っていくことができるのです。また、「支援機能」とは、ネットワークドライブの割り当てやプリンタへの接続、環境変数の取得と変更などを行うためのプロパティ・メソッドをさします。これらの機能は、管理者が
WSH を利用して簡単なログオンスクリプトを作成できるように、と提供されているものになるわけです。
そのなかでも、WSH では、大きく分けて4つのオブジェクトが提供されています。それは、以下に示すものです。
- Wscript
- WshArguments
- WshShell
- WshNetwork
これらのオブジェクトは、その中にさらにオブジェクトを実装している場合があるので、実数としてはもう少しいろいろなものがあると考えておくといいでしょう。Microsoft
Excel などで VBA(Visual Basic for
Applications)のプログラミング経験があれば、イメージはつかみやすいかもしれません。
さて、これらのオブジェクトを利用してどんなことができるのでしょう?
最初に、柱となる
"Wscript" オブジェクトから見ていくことにしましょう。
Wscript オブジェクト
他のオブジェクトを利用するといった観点から見ると、一番よく利用されるのは、"CreateObejct"
メソッドでしょう。この命令を利用することで、他のコンポーネントのインスタンスを作成し、それを利用することができるようになります。先ほど紹介した、"Chart.vbs"
のように Microsoft Excel のインスタンスを作成するとなると、以下のようなソースコードを記述することになります。
'******* CreateObject.vbs *******
Dim objXL
Set objXL = Wscript.CreateObject("Excel.Application")
'******* End of File *******
しかし、このままであると、画面上には何も表示されないで終了してしまうため、下記のソースでは、あらかじめ用意されている Microsoft Excel
ファイルを開いて、画面上に表示された状態で終了するように修正してあります。
'******* CreateObject.vbs *******
Dim objXL
Set objXL = Wscript.CreateObject("Excel.Application")
objXL.Workbooks.Open("C:\temp\sample.xls")
objXL.Visible = True
'******* End of File *******
C ドライブのtemp ディレクトリに Sample.xls というファイルを用意しておくことによって、このスクリプトを実行すると、自動的に
Microsoft Excel が起動し、ファイルが開かれてくるはずです。WSH のオブジェクトを実際に利用しているのは、2行目に書かれている
CreateObject メソッドにて Microsoft Excel
のオブジェクトインスタンスを作成しているところだけで、残りの3行目以降は、Microsoft Excel の中で実装されているオブジェクト(ここでは、Excel
の Application
オブジェクト)を操作して、ファイルを開くといった動作をさせているのです。
このように、あらかじめ存在しているオブジェクトを操作して、その作業を自動化するといったことができるように設計されいるために、単にバッチとしての処理を行うのではなく、ひとつのアプリケーションのように動作させることもできるわけです。
CreateObject メソッドでは、クラス名からオブジェクトの生成を行いましたが、GetObject
メソッドを用いれば、ファイルからオートメーションオブジェクトを取得することができます。GetObject
メソッドの使用方法は、以下のとおりになっています。
Wscript.GetObject(strFileName[,ProdID]) =
objObject
ここでは、主にオブジェクトの生成に関しての説明を行ってきましたが、これ以外にも Wscropt
オブジェクトには、さまざまなメソッドやプロパティが用意されています。下記は、それらの名称と説明、利用方法を示しています。
- Application プロパティ
- Wscript の IDispatch インターフェイス
- Wscript.Application = objWscript
- Argument プロパティ
- パラメータコレクションオブジェクト
- Wscript.Argument = objArgument
- FileName プロパティ
- ホストの実行ファイルの完全パス
- Wscript.FileName = strFineName
- Interactive プロパティ
- 対話モードの状態の取得
- Wscript.Interactive = Status
- Name プロパティ
- Wscript の通称(デフォルト プロパティ)
- Wscript.Name = strName
- Path プロパティ
- Wscript.exe が格納されているディレクトリ名
- Wscript.Path = strPath
- ScriptFullName プロパティ
- WSH によって実行されているスクリプトの完全パス
- Wscript.ScriptFullName = strScriptFullPath
- ScriptName プロパティ
- WSH によって実行されているスクリプトのファイル名
- Wscript.ScriptName = strScriptName
- Version プロパティ
- WSH のバージョン情報
- Wscript.Version = strVersion
- CreateObject メソッド
- オブジェクトを生成し、そのイベントを確立する
- Wscript.CreateObject(strProdID,[strPrefix]) = objObject
- DisconnectObject メソッド
- 事前に接続されていたオブジェクトを WSH から開放する
- Wscript.DisconnectObject objObject
- Echo メソッド
- ウィンド、または、[ファイル名を指定して実行] ウィンドのコマンドプロンプトにパラメータを表示する
- Wscript.Echo [anuArg....]
- GetObject メソッド
- ファイルからオートメーションオブジェクトを取得する
- Wscript.GetObject(strFileName[,strProdID]) = objObject
- Quit メソッド
- 実行をやめて、指定されたエラーコードを返す
- Wscript.Quit [intErrorCode]
サンプル
Wscript オブジェクトを利用したサンプルをここで公開したいと思います。ここでご覧に入れるのは、Microsoft Excel
のオブジェクトインスタンスを作成し、Wscript
オブジェクトの持つプロパティの値をシート上に表示するといった内容のものです。同様の動作をするものが、Windows98
のサンプルとして入っていますが、この例では、理解しやすいようにより簡素化したものになっています。おのおのの動作に関しては、コメントを追加してありますので、参照してください。
Dim objXL
Dim intIndex
'
' CreateObject メソッドで Microsoft Excel オブジェクトの
'インスタンスを作成する
'
Set objXL = Wscript.CreateObject("Excel.Application")
objXL.Visible = TRUE 'Microsoft Excel を画面上に表示する
objXL.WorkBooks.Add 'Microsoft Excel のWorkbook を作成する。
objXL.Columns(1).ColumnWidth = 15 '表のセルの幅を設定する
objXL.Columns(2).ColumnWidth = 50 '表のセルの幅を設定する
objXL.Columns(3).ColumnWidth = 50 '表のセルの幅を設定する
objXL.Cells(1, 1).Value = "プロパティ名" '表の列に対する説明を代入する
objXL.Cells(1, 2).Value = "値" '表の列に対する説明を代入する
objXL.Cells(1, 3).Value = "説明" '表の列に対する説明を代入する
'
'値の表示される列の見た目を整えるためにセルの表示を左揃えにする。
'
objXL.Columns("B:B").Select
objXL.Selection.HorizontalAlignment = &hFFFFEFDD
'
' シート上に値を表示するたえのフラグ変数を設定
'
intIndex = 2
'
' Wscript のプロパティを Microsoft Excel の
' シート上に表示するため、"Show" サブプロシージャに値を渡す。
'
Call Show("Name", WScript.Name, "Wscript の通称")
Call Show("Version", WScript.Version, "Wscript の Version")
Call Show("FullName", WScript.FullName, "ホストの実行ファイルの完全パス")
Call Show("Path", WScript.Path, "Wscript.exe が格納されているディレクトリ名")
Call Show("Interactive", WScript.Interactive, "対話モードの状態")
Call Show("ScriptFullName", WScript.ScriptFullName, "WSHによって実行されているスクリプトの完全パス")
Call Show("ScriptName", WScript.ScriptName, "WSHによって実行されているスクリプトのファイル名")
'
' 引き渡されたデータをもとに Microsoft Excel のシートに
' 値を挿入していくためのサブプロシージャ
'
Sub Show(strName, strValue, strDesc)
'Microsoft Excel のオブジェクトを操作して、
'3つの引数の値をシート上に代入する。
objXL.Cells(intIndex, 1).Value = strName
objXL.Cells(intIndex, 2).Value = strValue
objXL.Cells(intIndex, 3).Value = strDesc
intIndex = intIndex + 1
objXL.Cells(intIndex, 1).Select
End Sub
おわりに
今回は、Wscript
オブジェクトとの利用方法に終始しました。それは、すでに述べたとおり、オブジェクトの再利用ということを考えているからです。もちろん、それだけではなく、さまざまな支援機能があるわけです。次回以降は、それらの支援機能について説明していきたいと思います。また、Site
Builder Network Japan Teamでは、皆さんからの様々なメッセージをお待ちしています。私達に伝えたい事があれば、kksbnreq@microsoft.com
までお送りください。もちろん、日本語で結構です。
Ryo
Nishiya:最近、すっかり鉄道模型に凝っている彼は、Site Builder Network
Japanで新しく始まったこのコラムに、他の誰よりも早く、ネタを提供してくれました。彼は、新宿にあるマイクロソフトの新しいオフィスで、Windows
DNAの啓蒙活動に勤しんでいます。また、少しでも皆さんの役に立てればと、毎日、多くの技術系書籍の中に埋没しながら生活しています。(編集K)