人気ブログランキング | 話題のタグを見る

[VBScript] wsfファイルのメリットとその活用方法

どーもボキです。

複数人で共通のvbsファイルを利用するならば、wsfファイル形式での運用がオススメ


wsfファイルのメリット

  • 一つのwsfファイル内に、複数の独立した機能(Job)を組み込める

    wsfファイルにおける各Jobは完全に独立した関係となっている。
    これにより、一つのwsfファイル内に、独立した機能を複数実装することができない。

    vbsファイルの場合は、完全に独立させた関数実装とするか、個別ファイルとして開発する必要がある。

  • HTTPプロトコル上のスクリプトファイルを利用できる

    <script language="VBScript" src="http://*****/vbCommon.vbs"/>
    対して、インクルード実行ではHTTPプロトコル上のファイルは使えない。

  • 同じフォルダ上のスクリプトはファイル名のみでアクセスできる

    <script language="VBScript" src="vbCommon.vbs"/>
    対して、インクルード実行ではドロップ実行時にファイルフルパス指定が必要。

  • エンコードしたスクリプトを利用できる(ただし、注意点アリ。詳細は以下)

    <script language="VBScript.Encode" src="vbCommon.vbe"/>
    対して、インクルード実行にはエンコードしたスクリプトは使えない。


wsfファイルの注意点

    元スクリプトがすべて動くとは限らない。エンコード対象は最小にとどめよう!

    vbCommon.vbe(エンコード済みスクリプト)では、
    TListクラスTIniFileクラスを利用すると、下図のように「クラスが定義されていません」となる。

    全コメントを削除してエンコードしても解決せず(近い症状)。

    この点は、サポート終了のVBS制約として受け入れ、
    エンコード単位をパスワード記載スクリプトのみといった運用で工夫しよう。
    [VBScript] wsfファイルのメリットとその活用方法_a0021757_10102080.png

サンプルプログラムのダウンロードと使い方

    wsfファイルのメリットを生かしたサンプルを作ってみた。

  • ダウンロード

  • 使い方は
    wsfファイルに適当なフォルダ・ファイルをドロップする、だけ。

    1. 親Job(冒頭のJob)は、ドロップされたパスを子job(Job:1)で処理させる。
    2. 親Jobは、「Job:1」の結果をもとに「Job:2」を実行する。

    このように、親子Jobを使い分ければ、一つのwsfファイル内での動作機能の切り分け開発が可能。
    各Jobのスクリプトをhttp参照させれば、ユーザ配布したスクリプトの管理も不要となる(Webサーバのみで管理可能)。

この記事での気付き

    そして、wsfファイルにて可能となる「HTTPプロトコル上のスクリプトの活用」。

    これらを徹底できれば、日頃のムダな処理作業は、迅速・長期にわたって排除できそう。

    具体的には、
    • ハイブリット開発で開発言語・技術ごとのメリットを活かす。
    • 処理系の親子関係を定義し、処理系を分離することで、子の処理の再利用性を高めておく。
    • スクリプト管理先をWEBサーバとすることで、ユーザ配布作業を0化する(HTTPアクセスさせる)。
    といった具合に。

にほんブログ村 IT技術ブログへ

今回開発したプログラムソース





<package>

<!-- jobをコントロールする親 ------------------------------------- -->
<job id=0>
<script language="VBScript" src="vbCommon.vbs"/>
<script language="VBScript">

If WScript.Arguments.Count = 0 Then WScript.Quit

' job:1
Dim cmd,arg
arg = WScript.Arguments(0)
For i = 1 To WScript.Arguments.Count -1
arg = arg & " " & WScript.Arguments(i)
Next
cmd = "cscript " & WScript.ScriptFullName & " //job:1 " & arg
objWS.Run cmd,1,True

' job:2
arg = objFS.GetParentFolderName(WScript.ScriptFullName)
cmd = "cscript " & WScript.ScriptFullName & " //job:2 " & arg
objWS.Run cmd,1,True

</script>
</job>

<!-- jobをコントロールされる子 その1 ----------------------------- -->
<job id=1>
<script language="VBScript" src="vbCommon.vbs"/>
<script language="VBScript">

For i = 0 To WScript.Arguments.Count -1
dprintf "WScript.Arguments(" & i &")=" & WScript.Arguments(i)
Next

</Script>
</job>

<!-- jobをコントロールされる子 その2 ----------------------------- -->
<job id=2>
<script language="VBScript" src="vbCommon.vbs"/>
<script language="VBScript">

For i = 0 To WScript.Arguments.Count -1
dprintf "WScript.Arguments(" & i &")=" & WScript.Arguments(i)
Next

</Script>
</job>
<!-- ------------------------------------------------------------- -->

</package>

by yozda | 2021-01-02 14:08 | プログラミング | Comments(0)