【VBScript】VBSを自動で管理者実行に昇格させたい!ダブルクリックで実行したスクリプト内で管理者昇格させる方法。

Windows

こんにちは!今回はVBScriptのダブルクリックで管理者権限で実行できるスクリプトを作成していきたいと思います。

今までにもバッチやPowershellでも同様に実行時に自動で管理者権限を取得するスクリプトを紹介しましたが、似たような方法でVBSでも実装できました。

VBSはバッチと違い、複雑な処理を実現できたり、Powershellと違って実行するのに準備が要りません。さらに、暗号化が容易でもあるので活躍の幅が広いのも特徴ですね。よくわかっていないユーザーが多い現場では重宝すると思います。

そんなVBSですから、ダブルクリックだけで管理者権限が取得できれば、より詳細な処理を行うことができます。

早速やっていきましょう!

やりたいこと

・ダブルクリックで管理者権限でVBSの処理を行いたい

今回は特に何もわからない人でも最も初歩的な「ダブルクリック」だけで実行できるようにしていきます。

スクリプト例

'①ダブルクリックで実行されたか判別
If WScript.Arguments.Count = 0 Then

'②管理者に昇格して実行
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ dummy", "", "runas", 1

'ex.管理者権限じゃなかったら終了
WScript.Quit
End If

解説

①ダブルクリックで実行されたか判別

まずは、ダブルクリックで実行されたときの処理を記述します。
どんなソフトウェアでも、ダブルクリック実行時には「プログラムに与えられる引数が何も無い」ということになります。

引数の数を数えたとき、それが「0個」であるならば、そのプログラムはダブルクリックされたと判別することができます。

If WScript.Arguments.Count = 0 Then

ここでの「 WScript.Arguments.Count 」はVBSに与えられた引数の数を返してくれます。
つまり、これが「0」であればダブルクリックで実行されたと判別できるわけですね。

ここでIF分岐させて、ダブルクリックで実行された場合IFの内容を実行させることができます。

②管理者に昇格して実行

次に管理者で実行させる部分になります。
今回はシェルオブジェクトを使って「スクリプト自分自身を管理者権限で実行させる」というプログラムを書いています。

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ dummy", "", "runas", 1

「objShell.ShellExecute」は「プログラムを実行する」という命令になります。これにVBScriptの実行プログラムである「wscript.exe」を指定しています。これの引数にスクリプトのパスを付けるとそれを実行するようになります。そこで自分自身をという意味で「 WScript.ScriptFullName 」を渡しています。

WScript.ScriptFullNameは今実行しているスクリプトのフルパスを返してくれます。この場合はダブルクリックして実行したスクリプト本体になります。これによってどこにスクリプトを配置しても確実に自分自身を実行しなおしてくれます。

※スクリプトパスに空白が入っても大丈夫なように両サイドに「"」を付ける必要があります。VBS内では「"」自体が命令として扱われてしまうため、「"」を正しく認識させるためにたくさんついています。

次に大事なのは「runas」を指定しておくことです。
これを指定しておくと、このShellExecuteはプログラムを管理者権限で実行してくれます。

最後に自分自身を実行した判別のために引数を与えなくてはいけません。
フルパスに「dummy」を引数としてつけています。これで実行しなおした際に①で解説した与えられた引数が1個になるため、そのまま管理者で実行できたと判別してその先の処理に進みます。

これによって管理者権限で後の処理が実行ができると仕組みですね!

あとがき

今回はVBScriptで管理者権限に自動昇格するスクリプトを紹介させていただきました。

VBSはむかーしからあるとはいえ、まだまだ現役で使えるスクリプトでもあります。
Powershellに置き換わるかなぁと思っていましたが、なぜかまだ簡単にダブルクリックで実行できないんですよね、PS。

バッチも変数だったり構文だったりが特殊なのでちょっと手が届かないことも多く、複雑な処理をやろうと思ったらVBSに軍配が上がります。(まぁ短いやつとかは全然バッチですんじゃうんですけどね^^;

そんなわけで、是非VBSでも管理者自動昇格を実装して、より自由かつこだわりの処理を実行してみてくださいね♪

何かのお役に立てれば幸いです。

コメント

Translate »
タイトルとURLをコピーしました