我在一家公司工作,我开发了一个批处理脚本,有时需要启用或禁用。我有我的主批处理文件,它执行一个很长的进程,然后是另外两个文件来启用或禁用它。两者都可以在Windows XP中正常工作,但在Windows 7中,当我想在任务调度程序中禁用任务时,cmd提示符会出现并给我一个拒绝访问错误。但是,如果我右键单击并以管理员身份运行,这确实可以成功。
嗯,这是一个自动化过程,因此没有人会去那里做右键单击选项,而且这是为大量人员部署的。那么,我可以在批处理脚本的顶部放置一些东西,这会导致.bat默认以管理员身份运行吗?
答案 0 :(得分:1)
强制批处理通过RunAs
命令以不同用户身份运行。此代码段检查USERNAME环境变量。如果它不是管理员,则它会自动使用Administrator credentials using the RunAs command
重新启动批处理。 Administrator password is required
。
@echo off
echo.Current User is '%USERNAME%'
rem -- Let's make sure this batch runs as Administrator --
set "RunAsUser=Administrator"
if "%USERNAME%" NEQ "%RunAsUser%" (
RUNAS /user:%RunAsUser% "cmd /c %~f0"||PAUSE
GOTO:EOF
)
rem -- your code goes below here --
echo.Hello World
ECHO.&PAUSE&GOTO:EOF
答案 1 :(得分:1)
这个脚本也适合你!只需将其粘贴到bat文件的顶部即可。如果要查看脚本的输出,请添加"暂停"命令位于批处理文件的底部。
@echo off
:: BatchGotAdmin
:-------------------------------------
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"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
<YOUR BATCH SCRIPT HERE>