VBScriptのWScriptオブジェクトとは?基本から活用まで徹底解説

VBScript(Visual Basic Scripting Edition)は、Windows環境での自動化やスクリプトによるタスクの実行に広く使用されるスクリプト言語です。

VBScriptには、システムの各種機能にアクセスするためのさまざまなオブジェクトが提供されています。

その中でも「WScriptオブジェクト」は、スクリプトの実行環境や対話型メッセージの表示、スクリプトの終了など、スクリプト実行時に便利な機能を提供する重要なオブジェクトです。

この記事では、VBScriptのWScriptオブジェクトについて詳しく解説し、その基本的な使用方法から応用例までを網羅します。

また、最後に学んだ内容を確認するための演習問題も用意していますので、ぜひ挑戦してみてください。

WScriptオブジェクトとは?

WScriptオブジェクトは、VBScriptがWindows Script Host(WSH)上で実行される際に利用できるオブジェクトで、スクリプト実行環境に関するさまざまな情報や操作を提供します。

このオブジェクトは、特定のメソッドやプロパティを通じて、スクリプトの動作を制御する機能を持っています。

WScriptオブジェクトが提供する主な機能には以下のようなものがあります。

  • スクリプトの終了: WScript.Quit メソッドを使用して、スクリプトの実行を終了できます。
  • メッセージの表示: WScript.Echo メソッドで、ユーザーに対してメッセージを表示できます。
  • スクリプト引数の取得: WScript.Arguments プロパティを使用して、コマンドライン引数を取得できます。
  • スクリプトの実行パスの取得: WScript.ScriptFullName プロパティで、スクリプトのフルパスを取得できます。

これらの機能を活用することで、VBScriptをより柔軟かつ強力に活用することができます。

WScriptオブジェクトの基本的な使用方法

ここでは、WScriptオブジェクトの基本的なメソッドとプロパティの使用方法について具体例を挙げながら説明します。

WScript.Echo メソッド

WScript.Echo は、ユーザーにメッセージを表示するための最も基本的なメソッドです。このメソッドを使用すると、簡単にメッセージボックスを表示することができます。

例:

WScript.Echo "Hello, World!"

このスクリプトを実行すると、「Hello, World!」というメッセージが表示されます。

WScript.Quit メソッド

WScript.Quit メソッドは、スクリプトの実行を終了するために使用されます。

このメソッドには、任意の終了コードを指定することができ、他のプログラムからスクリプトを呼び出す際に、その終了コードを利用して処理を判断させることが可能です。

例:

WScript.Echo "スクリプトを終了します。"
WScript.Quit 1

このスクリプトはメッセージを表示した後、終了コード1でスクリプトを終了します。

WScript.Arguments プロパティ

WScript.Arguments プロパティは、スクリプトに渡されたコマンドライン引数を取得するために使用されます。これにより、実行時にスクリプトにデータを渡すことが可能です。

例:

If WScript.Arguments.Count = 0 Then
    WScript.Echo "引数が指定されていません。"
Else
    WScript.Echo "指定された引数: " & WScript.Arguments(0)
End If

このスクリプトは、コマンドライン引数が渡されていない場合は警告を表示し、渡されている場合はその引数を表示します。

WScript.Sleep メソッド

WScript.Sleep メソッドは、スクリプトの実行を一時停止するために使用されます。指定したミリ秒数だけスクリプトの実行を停止し、その後、再開します。

例:

WScript.Echo "3秒待機します..."
WScript.Sleep 3000 ' 3000ミリ秒(3秒)待機
WScript.Echo "待機終了"

このスクリプトは、3秒間待機した後にメッセージを表示します。

WScript.ScriptFullName プロパティ

WScript.ScriptFullName プロパティは、実行中のスクリプトのフルパスを取得します。これにより、スクリプトがどのディレクトリで実行されているかを知ることができます。

例:

WScript.Echo "スクリプトのフルパス: " & WScript.ScriptFullName

このスクリプトは、実行中のスクリプトのフルパスを表示します。

WScript.ScriptName プロパティ

WScript.ScriptName プロパティは、現在実行中のスクリプトのファイル名を取得します。フルパスではなく、ファイル名のみが返されます。

例:

WScript.Echo "スクリプト名: " & WScript.ScriptNam

このスクリプトは、現在実行中のスクリプトのファイル名を表示します。

WScript.FullName プロパティ

WScript.FullName プロパティは、現在使用しているWindows Script Host(WSH)の実行ファイルのフルパスを返します。通常、このパスは cscript.exe または wscript.exe のパスです。

例:

WScript.Echo "WSHの実行ファイルのフルパス: " & WScript.FullName

このスクリプトは、WSHの実行ファイルのフルパスを表示します。

WScript.Path プロパティ

WScript.Path プロパティは、現在実行中のスクリプトが存在するディレクトリのパスを返します。これはスクリプト内でファイルパスを指定する際に便利です。

例:

WScript.Echo "スクリプトのディレクトリ: " & WScript.Path

このスクリプトは、スクリプトが存在するディレクトリのパスを表示します。

WScript.ScriptBaseName プロパティ

WScript.ScriptBaseName プロパティは、現在実行中のスクリプトの拡張子を除いたファイル名を返します。

例:

WScript.Echo "スクリプトのベース名: " & WScript.ScriptBaseName

このスクリプトは、スクリプトのベース名(拡張子を除いたファイル名)を表示します。

WScript.CreateObject メソッド

WScript.CreateObject メソッドは、ActiveXオブジェクトを作成するために使用されます。このメソッドを使うことで、VBScriptからさまざまなCOMオブジェクトにアクセスし、操作することができます。

例:

Dim shell
Set shell = WScript.CreateObject("WScript.Shell")
shell.Run "notepad.exe"

このスクリプトは、メモ帳を起動します。

WScript.GetObject メソッド

WScript.GetObject メソッドは、既存のActiveXオブジェクトにアクセスするために使用されます。これにより、既に動作中のオブジェクトを操作できます。

例:

Dim network
Set network = WScript.GetObject("winmgmts:\\.\root\cimv2")

このスクリプトは、WMI(Windows Management Instrumentation)を使用してシステム情報にアクセスするためのオブジェクトを取得します。

WScript.Interactive プロパティ

WScript.Interactive プロパティは、スクリプトが対話型で実行されているかどうかを示します。対話型で実行されている場合は True、そうでない場合は False を返します。

例:

If WScript.Interactive Then
    WScript.Echo "スクリプトは対話型で実行されています。"
Else
    WScript.Echo "スクリプトは非対話型で実行されています。"
End If

このスクリプトは、スクリプトが対話型で実行されているかどうかを確認し、メッセージを表示します。

WScript.StdOut, WScript.StdIn, WScript.StdErr プロパティ

これらのプロパティは、標準出力(StdOut)、標準入力(StdIn)、標準エラー出力(StdErr)にアクセスするために使用されます。主にコマンドライン環境でスクリプトを実行する際に使用されます。

例(標準出力):

WScript.StdOut.WriteLine "標準出力にメッセージを出力します。"

例(標準入力):

Dim input
input = WScript.StdIn.ReadLine
WScript.Echo "入力された内容: " & input

例(標準エラー出力):

WScript.StdErr.WriteLine "エラーメッセージを標準エラーに出力します。"

WScript.Version プロパティ

WScript.Version プロパティは、現在のWindows Script Hostのバージョンを取得します。

例:

WScript.Echo "WSHのバージョン: " & WScript.Version

このスクリプトは、使用しているWSHのバージョンを表示します。

WScript.ConnectObject メソッド

WScript.ConnectObject メソッドは、指定したオブジェクトにイベントハンドラを接続するために使用されます。このメソッドは、スクリプト内でオブジェクトのイベントを処理する場合に便利です。

例:

Dim obj
Set obj = WScript.CreateObject("SAPI.SpVoice", "Voice_")
WScript.ConnectObject obj, "Voice_"

Sub Voice_EndStream(ByVal StreamNumber, ByVal StreamPosition)
    WScript.Echo "音声ストリームの終了"
End Sub

obj.Speak "これはサンプルのテキストです。"

このスクリプトでは、音声合成(SAPI)オブジェクトに対してイベントハンドラを接続し、音声ストリームの終了時にメッセージを表示するようにしています。

WScript.DisconnectObject メソッド

WScript.DisconnectObject メソッドは、先ほどの WScript.ConnectObject メソッドで接続したイベントハンドラをオブジェクトから切断するために使用されます。

例:

Dim obj
Set obj = WScript.CreateObject("SAPI.SpVoice", "Voice_")
WScript.ConnectObject obj, "Voice_"

Sub Voice_EndStream(ByVal StreamNumber, ByVal StreamPosition)
    WScript.Echo "音声ストリームの終了"
End Sub

obj.Speak "これはサンプルのテキストです。"

' イベントハンドラの切断
WScript.DisconnectObject obj

このスクリプトでは、音声合成オブジェクトからイベントハンドラを切断します。

WScript.TimeOut プロパティ

WScript.TimeOut プロパティは、スクリプトの最大実行時間(秒)を指定するために使用されます。

このプロパティを設定すると、指定された時間を超えてスクリプトが実行されると自動的に終了します。

例:

WScript.TimeOut = 5 ' 5秒後にスクリプトが強制終了されます

この設定をすると、スクリプトが5秒以上実行されると強制的に終了します。

WScript.BatchMode プロパティ

WScript.BatchMode プロパティは、バッチモードでスクリプトを実行するかどうかを示します。

バッチモードとは、ユーザーとの対話が不要なスクリプトの実行モードです。このプロパティが True の場合、スクリプトは対話型のプロンプトを表示しません。

例:

If WScript.BatchMode Then
    WScript.Echo "バッチモードで実行されています。"
Else
    WScript.Echo "対話型で実行されています。"
End If

このスクリプトは、スクリプトがバッチモードで実行されているかどうかを確認します。

応用例: WScriptオブジェクトを使った簡易ログシステムの作成

WScriptオブジェクトを使用することで、簡単なログシステムを作成することが可能です。ここでは、スクリプトの実行時に発生するイベントをログファイルに書き込むスクリプトの例を紹介します。

例:

Dim fso, logFile, logPath
logPath = "C:\temp\script.log"

' FileSystemObjectを作成
Set fso = CreateObject("Scripting.FileSystemObject")

' ログファイルを開く(存在しない場合は作成)
Set logFile = fso.OpenTextFile(logPath, 8, True)

' ログメッセージを書き込む
logFile.WriteLine "スクリプトが実行されました: " & Now

' スクリプトのフルパスをログに書き込む
logFile.WriteLine "スクリプトのパス: " & WScript.ScriptFullName

' ログファイルを閉じる
logFile.Close

WScript.Echo "ログが " & logPath & " に書き込まれました。"

このスクリプトは、C:\temp\script.log に実行時刻とスクリプトのパスを記録します。スクリプトが実行されるたびに、このログファイルに追記されます。

演習問題

最後に、VBScriptの学んできたことを確認するために演習問題を紹介します。以下の問題を解いて、VBScriptの理解を深めましょう!

演習1:WScript.Echoを使ったメッセージ表示

ユーザーに対して「今日の天気はどうですか?」というメッセージを表示し、その後に「スクリプトを終了します。」というメッセージを表示してスクリプトを終了するVBScriptを作成してください。

演習1:解答例
WScript.Echo "今日の天気はどうですか?"
WScript.Echo "スクリプトを終了します。"
WScript.Quit

演習2:コマンドライン引数の取得

コマンドライン引数として与えられた名前を表示し、名前がない場合には「名前が指定されていません。」と表示するVBScriptを作成してください。

演習2:解答例
If WScript.Arguments.Count = 0 Then
    WScript.Echo "名前が指定されていません。"
Else
    WScript.Echo "こんにちは、" & WScript.Arguments(0) & "さん!"
End If

演習3:ログファイルに情報を記録

スクリプトが実行された時刻と、スクリプトのフルパスを指定されたログファイルに記録するVBScriptを作成してください。

ログファイルのパスはコマンドライン引数として受け取り、指定がない場合はエラーメッセージを表示してください。

演習3:解答例
If WScript.Arguments.Count = 0 Then
    WScript.Echo "ログファイルのパスが指定されていません。"
    WScript.Quit 1
End If

Dim fso, logFile
Set fso = CreateObject("Scripting.FileSystemObject")

Set logFile = fso.OpenTextFile(WScript.Arguments(0), 8, True)
logFile.WriteLine "スクリプトが実行されました: " & Now
logFile.WriteLine "スクリプトのパス: " & WScript.ScriptFullName
logFile.Close

WScript.Echo "ログが " & WScript.Arguments(0) & " に書き込まれました。"

まとめ

VBScriptのWScriptオブジェクトは、スクリプトの実行環境を制御するための強力なツールです。

本記事で紹介した基本的なメソッドやプロパティを理解し活用することで、スクリプトをより柔軟かつ効率的に動作させることができます。

演習問題に取り組むことで、実際にWScriptオブジェクトの使い方を試し、その応用力を高めてください。