2013-07-04 476 views
14

任何人都可以幫助我從自身運行vbs但具有管理員權限嗎? 我需要通過vbs將計算機重命名爲Win8,但只有通過管理員命令行(cmd - >以管理員身份運行 - > runScript.vbs)運行腳本時纔有可能。如果我啓動腳本與經典的CMD電腦沒有重新命名。如何從vbs以管理員身份運行vbs?

我的想法是我啓動具有用戶權限的腳本,沒有參數,如果沒有參數,腳本使用管理員權限運行自身,參數作爲標識符「我是管理員」。

有誰知道我該怎麼做? 謝謝。 McAndy

編輯:

我嘗試這樣做:

If WScript.Arguments.Count = 0 Then 
    Set objShell = CreateObject("Shell.Application") 
    objShell.ShellExecute "wscript.exe", "c:\Users\admin\Documents\selfConfigure.vbs -1", "", runas", 1 
End If 
+0

檢查海拔powertoy http://blogs.technet.com/b/elevationpowertoys/archive/2010/06/20/creating-a-self-elevating-script.aspx –

+0

這是偉大的代碼,但我認爲這不是我的問題的解決方案。如果腳本以管理員身份運行,我的問題不會得到解決。我需要可靠地運行它作爲管理員。此代碼僅用於檢查它,我是對的? – Daphnis

+0

nope「以下腳本將」重新啓動自身「提升,如果它尚未運行提升」 –

回答

19

如果UAC是在計算機上啓用,這樣的事情應該工作:

If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1 
    WScript.Quit 
End If 

'actual code 
+0

這與我嘗試的幾乎一樣。但它不起作用。 啓用UAC是什麼意思?我已將其設置爲「從不通知」,是否禁用? 如果我嘗試將UAC更改爲更高的選項,它沒有幫助。 – Daphnis

+0

Win8上的「永不通知」沒有完全禁用(你必須使用策略來完全禁用它),但幾乎沒有。當我在我的Win7測試箱上重新啓用UAC時,代碼工作正常。您在更改UAC級別後重新啓動了嗎? –

+0

不,我沒有,但不幸的是我不能使用啓用的UAC,因爲這個腳本必須在沒有用戶的情況下工作。沒有用戶會等待請求訪問。該腳本用於自動測試。不是其他選擇嗎? :/ – Daphnis

4

將其添加到文件開頭:

Set WshShell = WScript.CreateObject("WScript.Shell") 
If WScript.Arguments.Length = 0 Then 
    Set ObjShell = CreateObject("Shell.Application") 
    ObjShell.ShellExecute "wscript.exe" _ 
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1 
    WScript.Quit 
End if 
+0

這段代碼適用於我,接受的答案沒有。 – gronostaj

+0

@gronostaj然後你的腳本路徑顯然有空格,因爲這是這個答案和我的唯一區別。 –

+0

爲什麼你這樣做WshShell = WScript.CreateObject(「WScript.Shell」),然後從來不使用該對象? –

2

高程選擇好文章 - http://www.novell.com/support/kb/doc.php?id=7010269

配置應用程序總是請求提升權限:

程序可以被配置爲總是要求在HKCU下通過註冊表設置用戶級別升高。這些註冊表設置在即時生效,因此可以在啓動特定應用程序之前立即設置它們,並且如果需要,應用程序一啓動即使刪除。只需在「HKCU \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers」下創建一個「字符串值」,即可獲得值爲「RUNASADMIN」的可執行文件的完整路徑。以下是CMD的一個例子。

Windows Registry Editor Version 5.00 
[HKEY_Current_User\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"c:\\windows\\system32\\cmd.exe"="RUNASADMIN" 
+0

但我需要提升權限來編輯該註冊表設置,不是嗎?這種打敗的目的。 – masterxilo

2

樂趣律批處理文件

@set E=ECHO &set S=SET &set CS=CScript //T:3 //nologo %~n0.vbs /REALTIME^>nul^& timeout 1 /NOBREAK^>nul^& del /Q %~n0.vbs&CLS 
@%E%off&color 4a&title %~n0&%S%CX=CLS^&EXIT&%S%BS=^>%~n0.vbs&%S%G=GOTO &%S%H=shell&AT>NUL 
IF %ERRORLEVEL% EQU 0 (
    %G%2 
) ELSE (
    if not "%minimized%"=="" %G%1 
) 
%S%minimized=true & start /min cmd /C "%~dpnx0"&%CX% 
:1 
%E%%S%%H%=CreateObject("%H%.Application"):%H%.%H%Execute "%~dpnx0",,"%CD%", "runas", 1:%S%%H%=nothing%BS%&%CS%&%CX% 
:2 
%E%%~dpnx0 fvcLing admin mode look up&wmic process where name="cmd.exe" CALL setpriority "realtime"& timeout 3 /NOBREAK>nul 
:3 
%E%x=msgbox("end of line" ,48, "%~n0")%BS%&%CS%&%CX% 
+1

您能否介紹一下這個腳本的工作原理? – Lizz

2

`我的vbs文件路徑:

d:\ QTP實踐\驅動程序\ Testany.vbs'

objShell = CreateObject("Shell.Application") 

objShell.ShellExecute "cmd.exe","/k echo test", "", "runas", 1 

set x=createobject("wscript.shell") 

wscript.sleep(2000) 

x.sendkeys "CD\"&"{ENTER}"&"cd D:"&"{ENTER}"&"cd "&"QTP Practice\Driver"&"{ENTER}"&"Testany.vbs"&"{ENTER}" 

- 從谷歌搜索和一些調整,爲我工作

相關問題