我有這個更改註冊表值的vbscript,我希望它能夠在標準的Windows用戶帳戶中作爲另一個帳戶(具有管理權限)運行。是否有可能編碼它,使得當你雙擊vbscript時,它會詢問你的Windows帳戶名和密碼,然後你就可以使用該帳戶權限運行腳本?是否可以使用RUN AS提示符輸入vbscript?
謝謝!
我有這個更改註冊表值的vbscript,我希望它能夠在標準的Windows用戶帳戶中作爲另一個帳戶(具有管理權限)運行。是否有可能編碼它,使得當你雙擊vbscript時,它會詢問你的Windows帳戶名和密碼,然後你就可以使用該帳戶權限運行腳本?是否可以使用RUN AS提示符輸入vbscript?
謝謝!
在過去,你可以在註冊表中添加一個runas
關鍵相應的文件類型:
reg add "HKCR\VBSFile\Shell\runas\Command" /ve /t REG_EXPAND_SZ^
/d "\"%"SystemRoot"%\system32\wscript.exe\" \"%1\" %*" /f
這將增加一個運行方式…進入將會提示您輸入憑據的上下文菜單。
不幸的是,微軟在引入UAC時改變了「runas」行爲。現在該註冊表鍵將作爲管理員條目添加到上下文菜單中,只有在啓用UAC的情況下才能使用該條目。
Sysinternals營救(一如既往):您可以重新啓用上下文菜單條目作爲不同的用戶運行ShellRunas。下載存檔,將可執行文件解壓縮到您的%PATH%
中的目錄並運行ShellRunas.exe /reg
來註冊該程序。這將添加一個以不同的用戶身份運行。儘管如此,僅用於可執行文件的上下文菜單條目。要爲VBScript文件添加此條目,您還需要自己添加相關的註冊表項/值,例如像這樣:
reg add "HKCR\VBSFile\Shell\runasuser" /ve /t REG_SZ /d "@shell32.dll,-50944" /f
reg add "HKCR\VBSFile\Shell\runasuser\command" /v DelegateExecute /t REG_SZ^
/d "{ea72d00e-4960-42fa-ba92-7792a7944c1d}" /f
或通過合併.reg文件是這樣的:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\VBSFile\Shell\runasuser]
@="@shell32.dll,-50944"
[HKEY_CLASSES_ROOT\VBSFile\Shell\runasuser\command]
"DelegateExecute"="{ea72d00e-4960-42fa-ba92-7792a7944c1d}"
有在一個VBScript將這一沒有優雅的方式,雖然。如果您的系統已啓用UAC,你可以檢查,如果你的用戶已經擁有管理員權限(從here採用的驗證方法),並以其他方式使用ShellExecute
方法與「運行方式」重新啓動腳本動詞:
Set reg = GetObject("winmgmts://./root/default:StdRegProv")
rc = reg.GetStringValue(&h80000003, "S-1-5-19\Environment", "TEMP", val)
If rc = 5 Then
'return code 5 == access denied
're-launch script only when it was run without arguments, so we don't go
'in circles when admin privileges can't be acquired
If WScript.Arguments.Count = 0 Then
're-launch as administrator; the additional argument is a guard to make
'sure the script is re-launched only once
CreateObject("Shell.Application").ShellExecute "wscript.exe" _
, Chr(34) & WScript.ScriptFullName & Chr(34) & " relaunch", "", "runas", 1
WScript.Quit 0
Else
WScript.Echo "Cannot acquire admin privileges."
WScript.Quit 1
End If
Else
'your code here
End If
隨着UAC禁用,您需要通過InputBox
(壞)或custom password dialog(更好)提示輸入憑據。無論哪種方式,你需要通過runas.exe
Set sh = CreateObject("WScript.Shell")
sh.Run "runas /user:" & username & " cscript """ & WScript.ScriptFullName & """"
,並輸入密碼通過SendKeys
重新啓動腳本(這是在自己的權利是一個壞主意)。