我有一个小脚本,用于在Windows上为我管理的Bazaar存储库执行构建和安装过程。我试图从内运行与提升,管理权限的脚本Windows外壳程序(CMD.EXE) - 就好像我右键单击它并选择以管理员身份运行,但没有使用任何方法这需要使用图形界面。如何从Windows命令行以管理员身份运行命令?
回答
批处理/ WSH混合动力是能够调用ShellExecute的显示UAC提升对话框......
@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
cscript //E:JScript //nologo "%~f0"
@goto :EOF
)
echo.Performing admin tasks...
REM call foo.exe
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end
浏览C:\windows\System32
并右击cmd.exe
并以管理员身份运行。为我工作在Windows 7
如果你想运行使用提升的权限的脚本,你可以在脚本文件做同样或使用调度程序的运行方式不同的用户选项来运行该脚本。
这很棒,但不是我在命令行中可以做的事情,例如从安装脚本。唯一需要的用户干预是确认升级 - 与在Windows 6/7上安装任何程序时类似。 – jpaugh 2011-05-10 17:31:11
所有你需要做的就是使用runas
命令来运行程序作为管理员(一个警告)。
runas /user:Administrator "cmdName parameters"
在我而言,这是
runas /user:Administator "cmd.exe /C %CD%\installer.cmd %CD%"
请注意,您必须使用引号,否则runas命令将吞噬开关选项键入cmd。
还要注意的是,管理shell(CMD.EXE)在C启动:\ windows \ system32目录。这不是我想要的,但很容易将当前路径传递给我的安装程序,并使用绝对路径引用它。
以这种方式使用runas的警告是这样的:必须启用管理帐户,这不是Windows 7或Vista的默认设置。然而,here是如何使一个伟大的教程,以三种不同的方式:
我自己启用它打开管理工具,本地安全策略,然后导航至本地策略\安全选项和将帐户:管理帐户状态策略的值更改为启用,这不是链接中显示的三种方式之一。
更简单的方法:
C:> net user Administrator /active:yes
我将建立一个快捷方式,无论是到CMD或要运行的东西,然后设置快捷方式,需要管理员的属性,然后运行批处理文件的快捷方式。我没有测试过,以确认它会尊重这些属性,但我认为它更优雅,并且不需要激活管理员帐户。
此外,如果你做一个计划任务(可以从代码中设置)有运行它升高有一个选项。
:: ------- Self-elevating.bat --------------------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
findstr "^:::" "%~sf0">temp.vbs
cscript //nologo temp.vbs & del temp.vbs & exit /b
::: Set objShell = CreateObject("Shell.Application")
::: Set objWshShell = WScript.CreateObject("WScript.Shell")
::: Set objWshProcessEnv = objWshShell.Environment("PROCESS")
::: strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
::: objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
:admin -------------------------------------------------------------
@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k
对于一个演示:ARG2 3 4“另一个长期争论自elevating.bat “带有空格的路径” “
而这是另一个不需要创建临时文件的版本。
<!-- : --- Self-Elevating Batch Script ---------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
cscript //nologo "%~f0?.wsf" //job:Elevate & exit /b
-->
<job id="Elevate"><script language="VBScript">
Set objShell = CreateObject("Shell.Application")
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objWshProcessEnv = objWshShell.Environment("PROCESS")
strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
</script></job>
:admin -----------------------------------------------------------
@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k
第二个版本真的很棒。看看美化的''''cscript“self-elevating.bat?.wsf”''''部分。 – Rockallite 2015-04-29 02:01:59
纯文本'''.bat''和XML'''.wsh'''混合内容也非常漂亮。 – Rockallite 2015-04-29 02:16:47
“find”S-1-16-12288“'的SID是什么?当我使用'whoami/groups'时不会出现。 – lit 2015-09-16 14:34:22
简单的管道技巧,||
,在批处理中使用了一些.vbs。它将退出正常并以管理员身份重新启动。
@AT>NUL||echo set shell=CreateObject("Shell.Application"):shell.ShellExecute "%~dpnx0",,"%CD%", "runas", 1:set shell=nothing>%~n0.vbs&start %~n0.vbs /realtime& timeout 1 /NOBREAK>nul& del /Q %~n0.vbs&cls&exit
它也del /Q
temp.vbs完成使用它。
这是邪恶的!你介意更深入地解释这一行吗? – jpaugh 2014-12-31 15:14:56
尽管@amr ali's代码很棒,但我有一个例子,我的bat文件包含>
<
标志,并且因为某些原因它们窒息。
我找到了这个。把它放在你的代码之前,它完美的工作。
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else (goto gotAdmin)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs")
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
- 1. 以管理员身份在Windows命令行中运行cmd
- 2. 如何以管理员身份通过java运行命令行命令
- 3. 从命令行以管理员身份运行Python程序
- 4. Powershell和Python - 如何以管理员身份运行命令
- 5. 如何以管理员身份在Vb6中运行CMD命令
- 6. 以管理员身份从cygwin/mintty运行命令
- 7. 以管理员身份运行PowerShell命令 - 命令本身不会加载
- 8. 如何在Windows 7下以管理员身份运行命令行程序?
- 9. 以命令行管理员身份运行
- 10. 如何从VBS以管理员身份执行PowerShell命令?
- 11. 以管理员身份运行cmd以及命令?
- 12. 以C#管理员身份运行shell命令(manage-bde)
- 13. 以管理员身份通过java运行dos命令
- 14. 以PowerShell脚本中的管理员身份运行命令。 UAC
- 15. Windows CMD批处理文件以管理员身份运行命令
- 16. 如何以管理员身份运行VS 2010 Pro命令行选项?
- 17. 在Windows上以管理员身份运行时无法识别'choco'命令
- 18. PowerShell:如何从PowerShell以管理员身份运行远程命令提示符命令?
- 19. 如何以管理员身份在rake任务中运行shell命令?
- 20. 如何以管理员身份运行cmd并将命令传递给它?
- 21. 如何从命令提示符下以“以管理员身份运行”运行应用程序?
- 22. 如何以管理员身份运行?
- 23. 如何以管理员身份运行?
- 24. 如何让cmd.exe调用没有管理员帐户密码的“以管理员身份运行”命令?
- 25. 从java以管理员身份启动命令提示符(CMD)
- 26. 开发一个以管理员身份运行命令的应用程序
- 27. 蒙戈:命令行管理员身份验证失败
- 28. 如何以管理员模式运行命令
- 29. 如何从Windows命令行运行Qt
- 30. 如何从Windows命令行运行Maxima
您可以请@安德斯,告诉我这个脚本的工作要求是什么? a)Windows版本,b)已安装Visual Basic或.NET,c)已安装Java。在我看来,没有任何东西只有Windows运行,但我不确定。谢谢。 – 2014-03-21 14:15:32
@SopalajodeArrierez:在Win2000中添加runas动词,并在Win98/IE4 IIRC中添加cscript.exe。 – Anders 2014-03-21 19:55:24
谢谢@安德斯。请稍微提一个问题:我试图用我自己的程序(调用执行Windows shell.exe的* .lnk *文件)来使用您的脚本,并且我无法设置我的首选**图标**,就像我一直用任何.lnk文件做。这是:将图标分配给.lnk,但在执行期间(接受UAC提示后),运行窗口具有通常的* CMD *图标。有没有办法解决这个问题? – 2014-03-22 12:35:50