第3回 WScriptオブジェクトの詳細(1):Windows管理者のためのWindows Script Host入門(1/3 ページ)
いよいよ、WSHの標準オブジェクトを利用した実践的なスクリプト作成に入る。まずは基本となるWScriptオブジェクトから始めよう。
前回では、WSHスクリプト解説の第一歩として、WSHオブジェクト・モデルの概要について触れた。今回から数回にわたって、さらに1段掘り下げて、個々のWSHビルトイン・オブジェクトについて詳しく見ていくことにする。具体的には、WScript、WshShell、WshNetwork、WshControllerの各オブジェクトを1つずつ取り上げる。スクリプト・プログラミングでは、これらのWSHビルトイン・オブジェクトのメソッドやプロパティを活用して目的の処理を実行することになる。
オンライン情報リソース
本題に入る前に、WSHスクリプト・プログラミングに役立つオンライン・リソースをご紹介しておこう。これらはWindows Script Hostリファレンス、VBScriptランゲージ・リファレンス、『Windows 2000 Scripting Guide』である。
■Windows Script Hostリファレンス
以下本稿でもWSHのビルトイン・オブジェクトのメソッドやプロパティを順次解説していくが、すべてのメソッドやプロパティを一望にしたければ、マイクロソフトがインターネットで公開しているこのオンライン・リファレンスを利用する。サンプル・スクリプトなども紹介されているので、スクリプト作成では鋭意参照することになるだろう。
ただ残念なことに、左側のツリー表示とうまく連携されておらず、本文中のリンクをクリックしてページを移動した場合に、ツリーが最上位の「Web開発」しか表示されない。一時的なものかもしれないが、不都合であればツリーのみのクリックでページを移動するか、ベースとなるページ(上記のページなど)を表示させたままにしておき、階層を下がるときには、別ウィンドウ(Shiftキーを押しながらリンクをクリック)で表示させるとよいだろう。ツリー上では「Web開発」−「Scripting」−「SDKドキュメント」−「Windowsスクリプト テクノロジ」−「Windows Script Host」−「リファレンス」と進むことでアクセスできる。
■VBScriptランゲージ・リファレンス
以下本稿では、適宜サンプル・プログラムを示しながら説明を行う。すでに以前の連載で述べたとおり、言語としてはVBScriptを使用する。この際には、VBScriptのステートメントや関数を利用することになるが、VBScriptの言語仕様を解説するのは本稿の主眼ではないので、これらについては最低限の説明に留める。
VBScriptの言語仕様については、マイクロソフトがインターネットに公開しているページを参照されたい。
なお、サンプル・プログラムでVBScriptのステートメントや関数を使用した場合は、対応するリファレンス・ページのURLを挿入するようにする。
■『Windows 2000 Scripting Guide』
米Microsoftのサイトでは、『Windows 2000 Scripting Guide』というWSHスクリプトの解説書の内容が無償公開されている。もちろん英語だが、これはWSHスクリプトの定番書籍とも呼べるものだ。WSHの初歩から、WMIやADSIといった応用までが幅広くカバーされている。WSHを勉強するつもりなら、ぜひとも「お気に入り」に登録したい(何を隠そう、本連載でもこのドキュメントを大いに参考にしている)。
『Windows 2000 Scripting Guide』
市販されている書籍『Windows 2000 Scripting Guide』の内容をそのままWebで公開したもの。英語だが、スクリプト・プログラミングでは非常に頼りになる存在である。
WScriptオブジェクト
前回のWSHオブジェクト・モデルでご紹介したとおり、WScriptオブジェクトは、WSHオブジェクト・モデルの頂点に位置するオブジェクトである。ほかのすべてのWSHオブジェクトは、このWScriptを利用して取得する形になる。WScriptオブジェクトは、暗黙にインスタンス化されるので(暗黙のうちにオブジェクトが生成されるので)、ほかのオブジェクトとは違い、明示的にオブジェクトを生成しなくても、スクリプト中のどこからでも呼び出すことができる。
WScriptオブジェクトに含まれる各メソッド/プロパティと、それらの役割を一覧にすると次のようになる。
メソッド/プロパティ | 役割 |
---|---|
CreateObject/GetObject | COMオブジェクトの生成/取得 |
Echo/StdOut/StdIn/StdErr | データの表示、入出力管理(標準入出力など) |
Arguments | 実行時パラメータ |
Quit/Sleep/Timeout/Interactive | スクリプトの実行制御 |
Application/BuildVersion/FullName/Name/Path/ScriptFullName/ScriptName/Version | ホストの情報の取得 |
CreateObject/GetObject/ConnectObject/DisconnectObject | イベント制御 |
WScriptオブジェクトのメソッドとプロパティ |
WSHスクリプトでは、IE(Internet Explorer)やWMI(Windows Management Instrumentation)、ADSI(Active Directory Service Interfaces)などのCOMオブジェクトを制御することでさまざまな処理を行う。このためのCOMオブジェクト生成や参照を始め、標準入出力の取り扱いや実行時パラメータの取得、スクリプトの実行制御など、WSHスクリプトの実行の基本となる機能や情報がWScriptオブジェクトに含まれていることが分かる。
これらWScriptオブジェクトのメソッド/プロパティの関係を図にすると次のようになる。
図の「M」はWScriptオブジェクトのメソッド、「P」はプロパティを表している。メソッド(method)は「方法、手段」という意味で、オブジェクトが提供するコマンドのようなものだ。これらのメソッドを適宜呼び出すことで、スクリプトからオブジェクトを操作する。例えば何らかのオブジェクトを生成するには、WScriptオブジェクトのCreateObjectメソッド(WScript.CreateObject)を呼び出す(具体的なプログラム例は後述する)。
一方のプロパティ(property)は、「性質、特性、属性」という意味で、そのオブジェクトに関する何らかの情報を保持している。スクリプトでは、オブジェクトのプロパティから適宜情報を読み出して処理を進める。例えばWScriptオブジェクトのArgumentsプロパティには、スクリプトが実行されたときに指定されたオプションが格納されている。オプションに応じてスクリプトの処理を切り替えるには、Argumentsプロパティの値を利用することになる。
このWScriptオブジェクトのArgumentsプロパティからWshArgumentsオブジェクトに対して、またWshArgumentsオブジェクトのNamedおよびUnnnamedプロパティからWshNamed/WshUnnamedオブジェクトに対してそれぞれ線が引かれている。これは、プロパティの値が、線でつながれたオブジェクトであることを示す。つまりWScript.Argumentsプロパティの内容は、WshArgumentsクラスのインスタンス(=オブジェクト)になっており、WScriptArguments.Namedプロパティの内容はWshNamedクラスのインスタンスになっているということだ。前回ご紹介したように、オブジェクトのメソッドやプロパティは、“WScript.Arguments”のように、ドットでつなげて表記する。
図では、WshArgumentsオブジェクトのItemプロパティが複数の矩形の重なりとして表現されている。これは、Itemプロパティが複数の値を持つことを表している(このように複数の値を持つクラスは「コレクション・クラス」と呼ばれる。詳細は追って説明する)。例えば、スクリプト実行時に指定された1番目のパラメータは、“WScript.Arguments.Item(0)”、2番目のパラメータは“WScript.Arguments.Item(1)”として参照できる。いま、次のようにtestscript.vbsスクリプトを実行したとする。
cscript testscript.vbs param1 param2
この場合、WScript.Arguments.Item(0)の値は“param1”、WScript.Arguments.Item(1)の値は“param2”になる。つまりコレクション・クラスは、一種の配列として参照することができる。
また、“Set args = WScript.Arguments”のようにプロパティを変数に代入すれば、変数argsはWshArgumentsオブジェクトとして扱うことが可能になる。従ってWScript.Arguments.Item(0)とargs.Item(0)は等価になる。具体的なプログラム例については、追って詳しく説明する。
Copyright© Digital Advantage Corp. All Rights Reserved.