Windowsに制限付きユーザーでログインしている時に管理者のユーザー権限でプログラムを実行したい場合、コンテキストメニューから「別のユーザーとして実行(A)…」を選択するか、runasコマンドを使う。
runasコマンドの基本的な使い方は、以下の通り。
runas /user:ユーザー名 プログラム
詳しい使い方はrunas /?に譲るとして、大抵の場合、管理者のユーザー権限でプログラムを実行したい場合は、ユーザーのパスワードの入力が必要となる。
JScriptを使って管理者のユーザー権限でプログラムを実行し、パスワードを自動的に入力したい場合は、以下のようなスクリプトになる。
var userFile = "user.txt"; var passFile = "pass.txt"; var args = WScript.Arguments; if (args.length != 1) { WScript.Quit(1); } var AppPath = args(0); var AppExecUserName = getTextFileData(userFile); var AppExecUserPass = getTextFileData(passFile); //実行したいプログラムを指定する。 //runasコマンドのコマンドラインオプションは、"runas /?"を参照 var WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run("runas /user:" + AppExecUserName + " " + AppPath + " ", 2); //savecred delayedSendKeys(AppExecUserPass); //実行するパスワードを送信 function delayedSendKeys(str) { WScript.Sleep(300); for (var i = 0; i < str.length; i++) { WScript.Sleep(100); WshShell.SendKeys(str.substring(i, i + 1)); } WScript.Sleep(300); WshShell.SendKeys("{enter}"); } function getTextFileData(fileName) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var s = fso.OpenTextFile(fileName, 1, false).ReadAll(); return s; }
パスワードの自動入力は、SendKeysで行なっている。
このスクリプトを使うと、管理者のユーザー権限とパスワードが設定済みならば、制限付きユーザーであってもほぼ何でも実行できてしまうようになるので、スクリプトの取り扱い(特に利用環境)とパスワードの漏洩には十分に注意しましょう。使用する場合は、自己責任で。
このJScriptを一歩進めてExcelVBAで実装してみると、以下のような感じになった。
パスワードの管理がほんの少しだけましになるけれど、やっぱり取り扱いには十分な注意が必要。