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で実装してみると、以下のような感じになった。
パスワードの管理がほんの少しだけましになるけれど、やっぱり取り扱いには十分な注意が必要。
