VBScript and UAC elevation
Vista/7環境ではWSHスクリプトを「管理者として実行」で実行できない。
(悪意あるスクリプトを防ぐ/ユーザーアカウント制御(UAC)のため)
それによりレジストリの書き込みなどが出来ない。
(HKCUキー以外の、かな。HKLMには書き込めないのを確認)
そこで以下のスクリプト、7対応。
WSH/OSのバージョンをチェックし、5.7/OS6~ならrunasコマンドを使い、管理者権限で実行しなおす。
これでUACが出て昇格でき、レジストリも書き込める。
-
-
- do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
-
-
- Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
- Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")
- For Each value in os
- if left(value.Version, 3) < 6.0 then exit do
- Next
-
-
- Set sha = CreateObject("Shell.Application")
- sha.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas"
-
- WScript.Quit
- loop
-
-
- Set WshShell = WScript.CreateObject("WScript.Shell")
- WshShell.RegWrite "HKLM\SOFTWARE\Test\Value", "Test", "REG_SZ"
' 管理者権限に昇格
' WScript.Arguemnts.Count = 0:GUI 1:CUI
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7
' Check WScript5.7~ and Vista~
Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")
For Each value in os
if left(value.Version, 3) < 6.0 then exit do 'Exit if not vista
Next
' Run this script as admin.
Set sha = CreateObject("Shell.Application")
sha.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas"
WScript.Quit
loop
' todo:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKLM\SOFTWARE\Test\Value", "Test", "REG_SZ"
runasコマンドについては
ここ参照。
※コマンドプロンプトからスクリプトを実行する際は、コマンドプロンプトを管理者権限へ昇格してスクリプトを実行すれば良いだけの話です。
>
コマンドプロンプトを管理者へ昇格して実行
Original Ref:
Windows VistaでのWSH(VBScript)の管理者権限への昇格方法, 思うところはあるがここには書かない - ebi's diary(2008-08-13)
http://ebi.dyndns.biz/diary/20080813.html
ORCA愉快日記(2009-05-22):VBScriptでVistaのUACの権限昇格を行う方法
http://hitaki.net/diary/20090522.html