VBScript は、2023 年 10 月に利用非推奨となり、2027 年にデフォルトで無効化がアナウンスされています。
その後の Windows リリースで将来的に削除される予定とも。
(Microsoft Edge の IE モードが 2029 年にサポート終了となる予定。
これに伴い、 ActiveX や VBScript も動作しなくなると考えた方がよさそうという私見)
そのようなロードマップがある上で、これまでに作成された VBScript 資産を他スクリプトに移植せず、そのまま使い続ける
そんな選択肢を取れないか?
と探して辿り着けたのが「 OpenVBS 」です。
OpenVBS は、 VBScript ファイル( .vbs )を Mac や Linux でも動かせる設計ですが、当記事では Windows 環境で使うことを前提とします。
1. OpenVBS is 何?
株式会社ナチュラルスタイルが提供するオープンソースのスクリプトエンジン。
VBScript 互換が主目的なので、かなりの VB コマンドに対応しています。
対応しているコマンドについては、下記ページが参考になります。
OpenVBS - The Script Engine for the BASIC-2020 -
openvbs/readme.txt
2. OpenVBS のビルド手順
(1) GitHub からソースをダウンロードし、任意のフォルダに展開する
(2) (1) の展開フォルダに移動し、 nmake /f makefile.win を実行する
実行結果例:

(3) nmake で以下5つのファイルが生成される
(a) oscript.exe:本記事対象
(b) openvbs.dll:本記事対象
(c) OPENASP.dll:本記事非対象
(d) GUI.dll:本記事非対象
(e) REGEXP.dll:本記事非対象
出力ファイル例:

3. OpenVBS で vbs ファイルを実行
下記のような vbs ファイルで動作を確認します。
option explicit:
dim [VBS変数]:[VBS変数] = 200
dim [Main戻り値]
Function ByTen(a)
ByTen = a / 10
End Function
Sub Main
[Main戻り値] = ByTen([VBS変数])
End Sub
Call Main
WScript.Echo [Main戻り値]
(a) oscript.exe で実行する( cscript.exe 相当 )
実行結果:

(b) openvbs.dll で実行する( vbscript.dll 相当 )
(b-1) 管理者権限コマンドプロンプトから vbscript.dll をレジストリに登録する
登録例)regsvr32 c:\openvbs\openvbs.dll
登録に成功すると下記メッセージが表示される

【参考】登録を外すコマンド: regsvr32 /u c:\openvbs\openvbs.dll
(b-2) cscript で OpenVBS エンジンを指定して実行する

4. C# などから実行している VB スクリプト
Microsoft.ClearScript.Windows.VBScriptEngine パッケージを使用し、C# アプリから VB スクリプトを実行している場合、下記リポジトリが代替手段となります。
(1) GitHub からソースをダウンロードし、任意の場所に展開する
(2) (1) で展開したフォルダに移動し、 nmake /f makefile を実行する
実行結果例:

(3) nmake で以下3つのファイルが生成される
(a) openvbs.dll:本記事対象
(b) sample-regfree.exe:本記事対象( regsvr32 で dll 登録が不要 )
(c) sample.exe:本記事非対象( regsvr32 で dll 登録が必要 )
出力ファイル例:

(4) コマンドプロンプトから sample-regfree.exe を実行する
実行結果例:

【参考】
sample-regfree.cs ファイルで実行しているスクリプト
const string script =
"bridge.Log \"Hello from OBScript!\"\r\n" +
// ①COM 通信で公開した Bridge クラスの Log メソッドを呼出す
// ②コンソールに出力される
"Dim total\r\n" +
"total = bridge.Add(40, 2)\r\n" +
// ①COM 通信で公開した Bridge クラスの Add メソッドを呼出す
// ②計算結果が返される
"bridge.Log \"Add returned: \" & total";
// ①COM 通信で公開した Bridge クラスの Log メソッドを呼出す
// ②コンソールに出力される
