[备忘] 如何在批处理中获取调用管理员权限

作者:logger 发布时间:2019-09-30 分类:备忘录

UAC_in_Batch_file
如何在批处理内检测并获取管理员权限运行现有脚本.

该脚本会以标准UAC界面自动提升CMD或BAT文件的运行权限.
只需将该脚本放到你自己的批处理脚本代码之前即可.

代码开始:

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> 检查权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> 如果错误标记设置,我们未取得管理员身份.
if '%errorlevel%' NEQ '0' (
    echo 正在请求管理员权限...
    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"
:--------------------------------------
--==这里存放你自己的批处理脚本代码==--

原理:该脚本基于VBS调用批处理.它通过企图创建文件夹的方式,检测当前窗口是否拥有管理员权限.一旦发现无法创建文件夹,则调用UAC对话框请求管理员权限,然后关闭没有管理员权限的窗口.该脚本亦可以在任何已经打的管理员命令行内执行.


---

文章引用:

https://stackoverflow.com/questions/1894967/how-to-request-administrator-access-inside-a-batch-file

https://sites.google.com/site/eneerge/scripts/batchgotadmin


标签: UAC,批处理,