2009年4月26日日曜日

JScriptファイルをログオンスクリプトにするとき拡張子を.jseにするのが良い件

たまには技術的な話を。

JScriptファイルの拡張子.jsは、WindowsのデフォルトではWSH(Windows Scripting Host)に関連付けられています。
なので、一般的な環境では.jsファイルをダブルクリックするとwscript.exeコマンドでスクリプトが実行されるし、Microsoftのドキュメント(「ログオンスクリプトの作成」の項)を見てもwelcome.jsという名前のファイルを使っています。

ところが、.jsファイルをログオンスクリプトとして使おうとするとこの方法ではうまくいかない場合があります。
それは.jsという拡張子がWebのJavaScriptファイルと同じであるため、DreamweaverなどのWebオーサリングソフトをインストールしていると、拡張子の関連付けがそのアプリに変更されていて、スクリプトとして実行されない場合があるから。
これは管理者としては頭の痛い問題です。

解決策としては、ログオンスクリプトはバッチファイルにしておき、その中から明示的にwscript.exe経由でスクリプトを実行するようにする方法も考えられますが、あまりエレガントではありません。
実はもっと簡単な解決方法があって、スクリプトの拡張子を.jsから.jseに変更するだけで良いのです。

.jseファイルは元々スクリプトファイルの中身を暗号化するWindows Script Encoderが出力する形式のファイルですが、実は暗号化を施さないで拡張子を.jseに変えただけのJScriptファイルも問題なく実行できます。
これは、Windows Script Encoderが必ずしもファイル全体を暗号化するわけではなく、「//**Start Encode**」というマーカ以降のみを暗号化する(逆に実行時にはこのマーカが現れる以前は暗号化されていない普通のスクリプトとして解釈する)という柔軟性のある仕様になっているからです。
(Windows Script Encoderに関しては@ITに詳しい記事があります)

もちろん.jseという拡張子もほかのアプリケーションに関連付けされる可能性があってこの対策で100%完全というわけにはいきませんが、うちの会社の環境では今のところ大丈夫のようです。


てか、最初から大人しくVBScript(拡張子.vbs)でスクリプトを書けばいいんだけど、VisualBasicの文法はどうしても好きになれないんだよね。。。
WSHでJScriptを使うケースは少ないのかMicrosoft以外では情報も少なくて、結構大変だったりするのですが。(^^;

0 件のコメント:

コメントを投稿