WindowsVista以降、セットアップや重要なプログラムを実行する際には「管理者として実行」というモードで開く必要があり、これを選択するとUACの確認画面が出るようになった。
仕事でよくVBSのスクリプトを書くのだが、その処理中でレジストリの「HKEY_LOCAL_MACHINE」に書き込みを行ったり、Windowsフォルダにデータを書き込んだりする場合は、いくらユーザにAdmin権限があったとしても、書き込みに失敗してしまう。
そのため、こういう処理を行うプログラムの場合は、一般的に実行プログラムを右クリックして「管理者として実行」を選択すれば良いのだが、VBSの場合、右クリックしてもこのメニューが表示されない。
そのようなVBSを実行させたい場合、手っ取り早い回避策として
- BATファイルを作成
- BATファイル内にVBSの実行パスを記載
- BATファイルを右クリックして「管理者として実行」を選択
としていたが、これではファイルが余計にできてしまうし、単純なダブルクリックでは「管理者として実行」にならないので面倒くさい。
そこで、これを回避すべく、VBSを普通に開くだけで必ず「管理者として実行」になるよう改良してみた。
ネットで公開されていたソースを元に、使い勝手がいいよう自分なりにアレンジ。
Function runasCheck() Dim strScriptPathName Dim flgRunasMode Dim objWMI, osInfo, flag, objShell, os Dim strArgs Dim args Set args = WScript.Arguments flgRunasMode = False strArgs = "" ' フラグの取得 If args.Count > 0 Then If UCase(args.item(0)) = "/RUNAS" Then flgRunasMode = True End If strArgs = strArgs & " " & args.item(0) End If Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set osInfo = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem") flag = false For Each os in osInfo If Left(os.Version, 3) >= 6.0 Then flag = True End If Next Set objShell = CreateObject("Shell.Application") If flgRunasMode = False Then If flag = True Then objShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """" & " /RUNAS " & strArgs, _ "", "runas", 1 Wscript.Quit End If End If End Function
これを呪文のように、単純にコピペでVBSに記載。
そして、管理者として実行したいVBSのソース冒頭に、
Call runasCheck()
と記載するだけで、実行管理者権限で実行しなおしてくれる。
[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)
- 作者: (株)アンク
- 出版社/メーカー: 技術評論社
- 発売日: 2006/05/30
- メディア: 単行本
- 購入: 4人 クリック: 66回
- この商品を含むブログ (9件) を見る