让bat批处理以管理员权限运行的实现方法

2023-12-05 0 833
目录
  • 1、第一种方法
  • 2、bat脚本获取管理员权限
    • cd /d %~dp0及其用途
  • 3、bat脚本中以管理员权限执行命令
    • 分析
    • 相关命令/用法
      • ①mshta 命令
      • ②Shell.ShellExecute 方法(vbs语法)
      • ③findstr
      • ④符号
  • 4、自动以管理员身份运行批处理(bat)文件
    • 5、以管理员权限执行bat脚本
      • 6、如何让BAT和CMD批处理以管理员身份运行
        • 7、命令行CMD批处理自动以管理员身份运行的正确方法
          • 8、bat文件以管理员权限运行的几种方式
            • 9、BAT批处理提权

              在日常运维工作中,为方便对windows用户进行系统安装或配置等,使用Windows自带的批处理(bat文件)是一种最为简单快速的方法。

              但是,批处理脚本不会默认已管理员身份运行,一般情况下,我会将脚本命名为"XXXXXX(请右键点击,用管理员身份运行!).bat",但总有些用户会忽略这条提示,直接运行,此时由于权限不足,导致脚本运行失败。我们可以使用一种变通的方法,让bat启动时,首先调用vbs脚本,通过vbs脚本,以管理员身份调用该bat的 runas 部分

              我们的脚本可以写在runas 下,这样就点击该bat脚本,就可以已管理员身份运行了

              1、第一种方法

              有的电脑是非管理员登录,运行程序时,需要提示是否运行运行。解决方法如下:

              @ echo off
              %1 %2
              ver|find \”5.\”>nul&&goto :Admin
              mshta vbscript:createobject(\”shell.application\”).shellexecute(\”%~s0\”,\”goto :Admin\”,\”\”,\”runas\”,1)(window.close)&goto :eof
              :Admin
              //在你的bat开头加上上面的命令即可
              //下面是你需要执行的命令
              set path=%~dp0
              echo install mysql service…
              echo %path%
              cd %path%\\bin\\
              mysqld.exe –remove mysql
              mysqld.exe –install mysql
              echo start mysql Serviceo
              \”%SystemRoot%\”\\system32\\net start mysql

              2、bat脚本获取管理员权限

              @echo off
              %1 mshta vbscript:CreateObject(\”Shell.Application\”).ShellExecute(\”cmd.exe\”,\”/c %~s0 ::\”,\”\”,\”runas\”,1)(window.close)&&exit
              cd /d \”%~dp0\”

              cd /d %~dp0及其用途

              在WINDOWS下命令CD / D%〜DP0是什么意思

              有人可以帮我理解命令cd /d %~dp0及其用途。 再次dos命令如下

              cd /d %~dp0

              请帮我弄清楚它的含义。

              我们来剖析一下。 有三个部分:

            • cd– 这是更改目录命令。
            • /d– 这个开关让cd改变驱动器和目录。 没有它,你将不得不做cd %~d0 & cd %~p0。
            • %~dp0– 这可以进一步分为三个部分:
            • %0– 这表示批处理脚本的第零个参数。 它扩展到batch file本身的名称。

              %~0– 在那里解开扩展参数的双引号(")。

              %dp0–d和p有扩展的修饰符。d强制添加一个驱动器号并添加完整path。

              〜dp0:d =驱动器,p =path,%0 =此batch file的起始目录cd /d %~dp0会将path更改为相同的位置,batch file所在的位置

              见for /?更多细节

              写在bat文件的顶端就可以实现。

              3、bat脚本中以管理员权限执行命令

              在bat脚本文件第一行加上下面命令:

              %1 mshta vbscript:CreateObject(“Shell.Application”).ShellExecute(“cmd.exe”,\”/c %~s0 ::\”,\”\”,“runas”,1)(window.close)&&exit

              仅提权,将上方代码块内容复制到bat开头即可

              ver|findstr "[3-5]\\.[0-9]\\.[0-9]*" 1>nul 2>nul&&goto :st

              如需适配xp及更旧的系统,将该句提前并将主体放到:st标签下

              fltmc 1>nul 2>nul&& goto :st
              set parameters=
              :parameter
              @if not \”%~1\”==\”\” ( set parameters=%parameters% %~1& shift /1& goto :parameter)
              set parameters=\”%parameters:~1%\”
              mshta vbscript:createobject(\”shell.application\”).shellexecute(\”%~s0\”,%parameters%,\”\”,\”runas\”,1)(window.close)&exit
              cd /d %~dp0

              因为没找到把环境全部传过去的参数/命令,就手写了一下参数传递,不过无法处理引号内有空格的参数,会分成多个参数,需另找办法

              分析

            • 核心:Shell.ShellExecute 方法 对指定文件执行指定操作,以管理员权限运行脚本;也有另一种运行cmd.exe加参数的写法
            • ver命令获取系统版本号
            • fltmc命令用于判断是否已拥有管理员权限
            • 相关命令/用法

              ①mshta 命令

              mshta vbscript:<commmand>mshta javascript:<command>

              ②Shell.ShellExecute 方法(vbs语法)

              https://learn.microsoft.com/zh-cn/windows/win32/shell/shell-shellexecute

              iRetVal = Shell.ShellExecute( _
              sFile, _
              [ ByVal vArguments ], _
              [ ByVal vDirectory ], _
              [ ByVal vOperation ], _
              [ ByVal vShow ] _
              )

              ③findstr

              findstr [/b] [/e] [/l | /r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/f:<file>] [/c:<string>] [/g:<file>] [/d:<dirlist>] [/a:<colorattribute>] [/off[line]] <strings> [<drive>:][<path>]<filename>[ …]

              注解

              所有 findstr 命令行选项都必须位于命令字符串中的strings和filename之前。

              正则表达式使用文本字符和元字符查找文本模式,而不是确切的字符串。

              文本字符是在正则表达式语法中没有特殊含义的字符,它只是匹配该字符的出现。 例如,字母和数字是文本字符。

              元字符是正则表达式语法中具有特殊含义的符号(运算符或分隔符)。

              更详细的可以参考这篇文章

              https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/findstr

              ④符号

              &:顺序执行多条命令,无论上一句命令是否执行成功

              &&:顺序执行多条命令,当没有正常执行上一句命令后停止

              ||: 顺序执行多条命令,只有上一句命令执行错误/未执行时继续

              %n:参数,%0为脚本本身

              https://learn.microsoft.com/zh-cn/archive/blogs/zainala/using-0-inside-the-batch-file-to-get-the-file-info

              1>nul:不显示命令运行的正确提示

              2>nul:不显示错误提示

              >:重定向

              nul:空设备

              @: 命令行回显屏蔽符

              |:命令管道符,将命令结果作为参数

              冒号:字符串截取、标签

              双冒号:作为注释使用

              4、自动以管理员身份运行批处理(bat)文件

              示例代码如下

              @ECHO OFF
              setlocal EnableDelayedExpansion
              color 3e
              title 添加服务配置

              PUSHD %~DP0 & cd /d \”%~dp0\”
              %1 %2
              mshta vbscript:createobject(\”shell.application\”).shellexecute(\”%~s0\”,\”goto :runas\”,\”\”,\”runas\”,1)(window.close)&goto :eof
              :runas

              ::填写自己的脚本

              echo 执行完毕,任意键退出

              pause >nul
              exit

              5、以管理员权限执行bat脚本

              只需要在你编写的.bat文件的开头加上以下脚本,然后双击.bat文件即是以管理员权限执行

              @echo off&color 17
              if exist \”%SystemRoot%\\SysWOW64\” path %path%;%windir%\\SysNative;%SystemRoot%\\SysWOW64;%~dp0
              bcdedit >nul
              if \’%errorlevel%\’ NEQ \’0\’ (goto UACPrompt) else (goto UACAdmin)
              :UACPrompt
              %1 start \”\” mshta vbscript:createobject(\”shell.application\”).shellexecute(\”\”\”%~0\”\”\”,\”::\”,,\”runas\”,1)(window.close)&exit
              exit /B
              :UACAdmin
              cd /d \”%~dp0\”
              echo 当前运行路径是:%CD%
              echo 已获取管理员权限

              6、如何让BAT和CMD批处理以管理员身份运行

              如何让BAT和CMD批处理以管理员身份运行?

              有些批处理需要很高的权限执行才能达到我们所需要的效果,将以下代码放入批处理最顶部就可以实现以管理员身份运行了。

              @echo off
              >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\” )

              7、命令行CMD批处理自动以管理员身份运行的正确方法

              修正了路径有空格时的问题

              在批处理开头加上:

              适用于无参数

              %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

              适用于一参数

              %2 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" "^&chr(34)^&"%~1"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

              更多参数的以此类推运行批处理时多加一个参数::,这句就不会执行为了兼容8.3短路径,可把%~0等换成%~s0等理论上是没问题,但启动路径有时不可靠,之后可能还要pushd或cd /d

              8、bat文件以管理员权限运行的几种方式

              1、创建bat快捷方式,然后右键快捷方式–>properties–>advanced–>Run as administrator。2、下载bat转成exe工具,将bat转成exe,然后右键exe–>properties–>Compatibility–>Run as administrator。3、以管理员权限运行cmd,然后dos框中运行相应的bat。

              9、BAT批处理提权

              给BAT批处理提权,基本都是借助VBS脚本提权

              @echo off
              >nul 2>&1 \”%SYSTEMROOT%\\system32\\cacls.exe\” \”%SYSTEMROOT%\\system32\\config\\system\”
              if \’%errorlevel%\’ EQU \’5\’ (
              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\”
              rem 后面跟想要执行的批处理

              将这种方法的原理是:会先执行一个命令,该命令需要管理员权限,如果没有管理员权限就会返回错误码5,然后在系统的Temp文件创建一个VBS脚本,在VBS脚本里用ShellExecute方法以runas的方式开一个进程,runas开的进程会以管理员权限运行。开的那个进程会再执行这个批处理,此时因为有权限,会返回0,然后删除VBS文件,执行自己写的那部分脚本。

              会出现的问题:如果需要从外界传参数给该bat批处理,需要在下面这个位置传,但是传过去的参数需要遵守VBS里的语法和ShellExecute的参数格式。如果出现了空格会十分麻烦。

              echo UAC.ShellExecute \”%~s0\”, \”这里输入参数\”, \”\”, \”runas\”, 1 >> \”%temp%\\getadmin.vbs\”

              到此这篇关于让bat批处理以管理员权限运行的实现方法的文章就介绍到这了,更多相关管理员权限运行bat内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

              您可能感兴趣的文章:

              • BAT 批处理脚本教程(详细篇悠久资源网补充)
              • Windows下使用批处理文件.bat删除旧文件
              • 利用bat批处理程序通过DOS命令行删除所有的空文件夹的方法
              • bat命令批处理判断32位还是64位系统的多种方法
              • 解决springmvc+mybatis+mysql中文乱码问题
              • bat文件加密 bat解密脚本(让bat乱码现形)
              • 解决bat批处理输出乱码的问题

              收藏 (0) 打赏

              感谢您的支持,我会继续努力的!

              打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
              点赞 (0)

              悠久资源 DOS/BAT 让bat批处理以管理员权限运行的实现方法 https://www.u-9.cn/jiaoben/dosbat/99617.html

              常见问题

              相关文章

              发表评论
              暂无评论
              官方客服团队

              为您解决烦忧 - 24小时在线 专业服务