2013-08-29 24 views
1

我有這個更改註冊表值的vbscript,我希望它能夠在標準的Windows用戶帳戶中作爲另一個帳戶(具有管理權限)運行。是否有可能編碼它,使得當你雙擊vbscript時,它會詢問你的Windows帳戶名和密碼,然後你就可以使用該帳戶權限運行腳本?是否可以使用RUN AS提示符輸入vbscript?

謝謝!

回答

1

在過去,你可以在註冊表中添加一個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重新啓動腳本(這是在自己的權利是一個壞主意)。

相關問題