トップ «前の日記(2009-05-18) 最新 次の日記(2009-05-30)» 編集

ORCA愉快日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|10|11|12|
2012|01|02|09|
2013|04|

2009-05-22 VBScriptでVistaのUACの権限昇格を行う方法

_ [PC] VBScriptでVistaのUACの権限昇格を行う方法

WSHでVBScriptなスクリプトを書いたときに、Vista環境ではUACの影響で管理者権限での操作が行えなかったので調べた際のメモ。他人のVista環境で実行してもらうので、インストールの関係上PowerShellではなくWSHで書く必要があったのです。また、UACを無効にするのはダメですし、アプリケーションを追加でインストールしてもらえるとは限らないでしょうし。ま、今さら感も強いのですが、システムのデフォルト環境で動かす必要がある場合には、レガシーなものが役に立ちますからねー。

Vista環境では、通常アプリケーションを管理者権限で実行したい場合は
右クリック→「管理者として実行」で実行したり、ファイルのプロパティの
互換性タブで管理者として実行するよう設定できる。
参考: @IT - Windows Vistaでプログラムを管理者モードで実行する
  
しかしながら、悪意のあるスクリプトが安易に実行されるのを防ぐためか
WSHスクリプトには、そのようなメニューやタブは存在しない。
  
そのため、下記のような方法を取る必要がある。
----------------------------------------------------------------
1.バッチファイルを介して、管理者権限で実行する
管理者権限で実行する際には、C:\Windows\System32などのパスで実行されるので
WSHスクリプトのフルパスを記述したバッチファイルを作成する。
(テキストファイルの内容を修正し、拡張子を.batにする)
バッチファイルを右クリック→「管理者として実行」で実行。
  
2.コマンドプロンプトを管理者権限で実行し、スクリプトを実行する
スタートメニューから「すべてのプログラム」→「アクセサリ」を開き
「コマンドプロンプト」の項目の上で右クリック→「管理者として実行」
で実行する。コマンドプロンプトが管理者権限で実行されるので
コマンドのフルパスを入力するなどして実行する。
  
面倒なようなら、スタートメニューを開き、下部にある検索エリアに
「cmd」と入力して、Ctrl+Shift+Enterキーを押して管理者として起動させる。
管理者として開いた場合は、タイトルバーに「管理者: ****」のように表示される。
  

  
3.PowerToysに含まれるelevateコマンドなどを利用し管理者権限に昇格して実行する
VistaのUACはrunasコマンドでの権限の昇格ができないようなので
下記のサイトを参考にし、権限昇格のためのelevateコマンドをインストールし
それを介して実行する。
http://technet.microsoft.com/ja-jp/magazine/cc510320.aspx
  
  
上記の方法はどれも、操作などの手間がかかるので
下記の権限昇格のためのコードを、WSHスクリプト自体に組み込むのが楽。
  
4.WSHスクリプトの先頭に下記のコードを組み込む方法
Vista環境かどうかチェック(WSHのバージョンが5.7/OSバージョンが6.0以上)して、
ShellExecuteをrunasで再実行させることで、管理者権限への昇格を試みます。
(下記のスクリプトで下から3,4行目)
  
これなら、ダブルクリックしてもらい権限の昇格の確認ダイアログで
「続行」を押すだけなので、簡単です。
  
下のスクリプトでは、Vista環境かどうかのチェックを行っているので
組み込んだスクリプトを、XPなどの環境で実行しても影響はありません。
Chr(34)はダブルクォート「"」を表しています。
=========================================================
Dim objWMI, objShell, osInfo, os 
  
' Vistaかどうかチェックし管理者権限に昇格させる
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
    Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set osInfo = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
  
    For Each os in osInfo
        If left(os.Version, 3) < 6.0 Then exit do
    Next
    
    ' 引数付きでwscriptを管理者権限で再実行
    Set objShell=CreateObject("Shell.Application")  
    objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " uac","","runas",1
    WScript.Quit
loop
=========================================================
  

  
参考URL
Jeans & Development - Vistaにおいて、VBScriptスクリプト中で管理者権限に移行する方法
http://kandk.cafe.coocan.jp/nucleus/index.php?itemid=639
Winhelponline.com - VBScripts and UAC elevation
http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html
Microsoft TechNet - Tales from the Script (WSHのバージョンやOS判別の記事あり:ページ中ほど。少し古い)
http://www.microsoft.com/japan/technet/community/columns/scripts/sg0903.mspx
@IT- 第7回 管理者権限での実行を制限するユーザー・アカウント制御UAC(前編)(UACをわかりやすく解説)
http://www.atmarkit.co.jp/fwin2k/vista_feature/07uac01/07uac01_01.html
Microsoft TechNet - Windows Vista でのユーザー アカウント制御の理解と設定 (UACの深い理解向け)
http://www.microsoft.com/japan/technet/windowsvista/evaluate/feat/uaprot.mspx

トップ «前の日記(2009-05-18) 最新 次の日記(2009-05-30)» 編集