24

任何人都可以帮助我从自身运行 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
4

6 回答 6

31

如果在计算机上启用了 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
于 2013-07-04T09:55:47.840 回答
9

将此添加到文件的开头:

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
于 2014-03-14T18:57:50.467 回答
3

海拔选项的好文章 - http://www.novell.com/support/kb/doc.php?id=7010269

将应用程序配置为始终请求提升的权限:

可以将程序配置为始终通过HKCU. 这些注册表设置即时生效,因此可以在启动特定应用程序之前立即设置它们,甚至可以在应用程序启动后立即删除,如果需要的话。只需为值为 的可执行文件的完整路径创建一个"String Value"under 。下面是 CMD 的示例。"HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers""RUN AS ADMIN"

Windows Registry Editor Version 5.00
[HKEY_Current_User\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"c:\\windows\\system32\\cmd.exe"="RUNASADMIN"
于 2014-05-13T07:15:08.753 回答
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%
于 2014-11-26T05:22:14.383 回答
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}"

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

于 2015-07-29T08:23:23.770 回答
2

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

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

Sub RunAsAdmin()
    Set Shell = CreateObject("WScript.Shell")
    Set Env = Shell.Environment("VOLATILE")
    If Shell.Run("%ComSpec% /C ""NET FILE""", 0, True) <> 0 Then
        Env("CurrentDirectory") = Shell.CurrentDirectory
        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.Sleep 100
        Env.Remove("CurrentDirectory")
        WScript.Quit
    End If
    If Env("CurrentDirectory") <> "" Then Shell.CurrentDirectory = Env("CurrentDirectory")
End Sub

Sub Main()
    'Your code here!
End Sub

优点:

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

缺点:没人

于 2018-10-14T13:43:55.753 回答