任何人都可以帮助我自己运行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
答案 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”,则“工作目录”参数无效。