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