如何从另一个具有管理员权限的批处理文件运行批处理文件?
我试过RUNAS命令,但它需要管理员密码。
我正在寻找通过右键单击批处理文件并以管理员身份运行的替代方法。我想从另一个批处理文件中自动化它。
将每一行放入 cmd 或批处理文件中的所有主题:
@echo off
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
"Put your command here"
这对我来说可以。
On Windows 7:
Create a shortcut to that batch file
Right click on that shortcut file and choose Properties
Click the Advanced
button to find a checkbox for running as administrator
Check the screenshot below
您可以使用PowerShell从以下位置以管理员身份运行 b.bat a.bat
:
set mydir=%~dp0
Powershell -Command "& { Start-Process \"%mydir%b.bat\" -verb RunAs}"
它将通过确认对话框提示用户。用户选择YES
,然后b.bat
将以管理员身份运行。
利用
runas /savecred /profile /user:Administrator whateveryouwanttorun.cmd
它只会在第一次询问密码。它不会再次询问密码,除非更改密码等。
如果您尝试调用 Windows UAC提示符(使整个屏幕变黑并询问您是否为以下任务授予管理员权限的提示符),RUNAS 并不是最流畅的方法,因为:
相反,请尝试复制并粘贴以下代码,以确保您的批处理文件以管理员权限运行:
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Requesting Admin access...
goto goUAC )
else goto goADMIN
:goUAC
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:goADMIN
pushd "%CD%"
CD /D "%~dp0"
rem --- FROM HERE PASTE YOUR ADMIN-ENABLED BATCH SCRIPT ---
echo Stopping some Microsoft Service...
net stop sqlserveragent
rem --- END OF BATCH ----
此解决方案在启用 UAC 的 Windows 7、8.1 和 10 设置下 100% 有效。
Runas.exe 在这里不起作用。您可以使用 VBScript 来调用“以管理员身份运行”shell 动词。Elevation Powertoys 包含一个批处理文件,允许您调用提升的命令:
elevate
cmd.exe
CMD本身没有以管理员身份运行文件的功能,但是powershell有,并且该powershell功能可以通过CMD用一定的命令来执行。将其写入命令提示符以运行您指定为管理员的文件。
powershell -command start-process -file yourfilename -verb runas
希望它有所帮助!
我发现有效的完整解决方案是:
@echo off
cd /D "%~dp0"
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
"Put your command here"
如果有人希望他们可以在批处理文件中尝试,我会使用这个技巧。这将在您运行批处理文件时为您提供管理员提示
@echo off
cd \ && cd windows/system32 && command which needs admin credentials
pause