如何从Windows命令行以管理员身份运行命令?

时间:2011-05-10 01:13:50

标签: cmd windows-7 windows-vista

我有一个小脚本,可以在Windows上为我正在管理的Bazaar存储库执行构建和安装过程。我正在尝试使用 Windows shell(cmd.exe)中提升管理权限来运行脚本 - 就像我右键单击它并选择以管理员身份运行,但不使用任何需要使用图形界面的方法。

9 个答案:

答案 0 :(得分:54)

您所要做的就是使用runas命令以管理员身份运行您的程序(需要注意)。

runas /user:Administrator "cmdName parameters"

就我而言,这是

runas /user:Administator "cmd.exe /C %CD%\installer.cmd %CD%"

请注意,您必须使用引号,否则runas命令会将switch选项吞噬到cmd。

另请注意,管理shell(cmd.exe)在C:\ Windows \ System32文件夹中启动。这不是我想要的,但很容易将当前路径传递给我的安装程序,并使用绝对路径引用它。

警告:启用管理员帐户

以这种方式使用runas需要启用管理帐户,这不是Windows 7或Vista上的默认帐户。但是,here是一个很好的教程,如何启用它,有三种不同的方式:

我自己通过打开管理工具本地安全策略,然后导航到本地策略\安全选项并更改值来启用它帐户:管理帐户状态策略为已启用,这不是链接中显示的三种方式。

更简单的方法:

C:> net user Administrator /active:yes

答案 1 :(得分:54)

按开始按钮。在搜索框中输入“cmd”,然后按 Ctrl + Shift + Enter

答案 2 :(得分:36)

批处理/ 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

答案 3 :(得分:10)

:: ------- 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

对于演示:self-elevating.bat"带空格的路径" arg2 3 4"另一个长篇论据"

这是另一个不需要创建临时文件的版本。

<!-- : --- 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

答案 4 :(得分:2)

我会设置一个快捷方式,可以是CMD,也可以是你要运行的东西,然后将快捷方式的属性设置为要求admin,然后从批处理文件中运行快捷方式。我没有测试过确认它会尊重这些属性,但我认为它更优雅,不需要激活管理员帐户。

此外,如果您将其作为计划任务(可以从代码设置)执行,则可以选择在那里升级运行它。

答案 5 :(得分:2)

简单管道技巧||,在批处理顶部使用了一些.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。

答案 6 :(得分:2)

尽管@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"
:--------------------------------------

答案 7 :(得分:0)

浏览到C:\windows\System32并右键单击cmd.exe并以管理员身份运行。在Windows 7上为我工作。

如果您尝试使用提升的权限运行脚本,则可以对脚本文件执行相同操作,或者使用调度程序作为其他用户选项运行以运行脚本。

答案 8 :(得分:0)

我刚刚在桌面上创建了一个快捷方式,目标中的这一行:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command Start-Process -verb RunAs wt

然后固定在任务栏中:)