如何从vbs以管理员身份运行vbs?

时间:2013-07-04 09:27:35

标签: windows vbscript administrator elevated-privileges

任何人都可以帮助我自己运行vbs但是拥有管理员权限吗? 我需要通过VBScript将计算机重命名为Windows 8,但只有通过管理员命令行(CMD→以管理员身份运行→runScript.vbs)运行我的脚本才有可能。如果我使用经典CMD启动脚本,则不会重命名计算机。

我的想法是我使用用户权限启动脚本,没有参数,如果没有参数,脚本将使用管理员权限重新运行,并使用参数作为标识符“我是管理员”。

有谁知道我该怎么做?

修改

我试过了:

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

6 个答案:

答案 0 :(得分:24)

如果计算机上启用了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

答案 1 :(得分:6)

将其添加到文件的开头:

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

答案 2 :(得分:3)

有趣的lil批处理文件

@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%

答案 3 :(得分: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"

答案 4 :(得分:2)

`我的vbs文件路径:

  

D:\ QTP Practice \ Driver \ 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}"

- 从谷歌搜索和一些调整,为我工作

答案 5 :(得分:1)

这是通用且最佳的解决方案:

If WScript.Arguments.Count <> 1 Then WScript.Quit
RunAsAdmin
Main

Sub RunAsAdmin
    If CreateObject("WScript.Shell").Run("%ComSpec% /C NET FILE", 0, True) <> 0 Then
        ArgsList = ""
        For i = 1 To WScript.Arguments.Count
            ArgsList = ArgsList & """ """ & WScript.Arguments(i - 1)
        Next
        CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & ArgsList & """", , "runas", 5
        WScript.Quit
    End If
End Sub

Sub Main()
    MsgBox WScript.Arguments.Count
End Sub

优势:

1)不能进行参数注入。
2)提升管理员权限后,参数数量不会更改,然后可以在提升自己之前进行检查。
3)您真正了解脚本是否立即以管理员身份运行。例如,如果从控制面板卸载条目中调用它,则RunAsAdmin函数将不会不必要地运行,因为在这种情况下,您已经是管理员。如果从已经提升为管理员的脚本中调用它,也是如此。
4)窗口应保持其当前大小和位置。

警告:

1)如果“动词”参数为“ runas”,则“工作目录”参数无效。