【bat】windows脚本bat 五种获取管理员权限的方法,优雅地以管理员权限运行

【bat】windows脚本bat 优雅地获取管理员权限,以管理员权限运行

bat优势

相较powershell的脚本ps1,bat文件可以在不修改系统安全配置的前提下运行。功能较弱,可以配合其他脚本使用。

以下罗列了5种方式,并且给出了优缺点比较。

5种实现方式

  1. 初级版
    这种是很早的一种实现方式,需要中间文件vbs脚本来实现(bat和vbs混排可以实现无需中间文件,但是很复杂,不推荐)
    尝试读取系统目录文件,判断执行结果以确认是否有管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
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" )
  1. 进化版
    很巧妙的一种方式,获取管理员权限后把第一个参数设置为::,把该行作为注释,避免重复执行。
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
  1. 超进化版vbs
    如果执行该脚本时已经是管理员权限,则上面代码还是会执行。
    使用Net session判断是否为管理员权限,如果不是,则请求获取权限。
Net session >nul 2>&1 || mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0","","runas",1)(window.close)&&exit
  1. powershell版
    相比上面的方法,使用powershell的方式更加简洁。且win10推荐使用powershell。
Net session >nul 2>&1 || powershell start-process hello.bat -verb runas
  1. 带参数powershell版
    上面的所有方法,都缺少了参数的转发。
    参数的转发其实不复杂,复杂的是带空格的参数。
    有兴趣可以自己先研究下,这里就暂不公开。
    原文作者:小傻哥
    原文地址: https://blog.csdn.net/lionking1990/article/details/122270881
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞