it编程 > 前端脚本 > Dos/bat

批处理判断是否为管理员权限如果不是则自动获取管理权限

144人参与 2024-09-08 Dos/bat

实际应用代码

@echo off&(pushd "%~dp0")&(reg query "hku\s-1-5-19">nul 2>&1)||(
powershell -command "start-process '%~sdpnx0' -verb runas"&&exit)

判断是否以管理员身份运行

这个操作方式比较多,核心思想就是试图访问需要管理员身份才可以访问的资源,可以访问则有权限,不可以访问则没有权限
以下三种方式都可以进行判断,可以灵活使用

"%systemroot%\system32\cacls.exe" "%systemroot%\system32\config\system"
reg query "hku\s-1-5-19"
net.exe session

使用管理员权限运行

提供两种方式

vbs方式

mshta vbscript:createobject("shell.application").shellexecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)

powershell方式

%~sdpnx0: 指向当前批处理文件

powershell -command "start-process '%~sdpnx0' -verb runas"

powershell -command "start-process '%~sdpnx0' -verb runas"&&exit

这是一个powershell命令,用于以管理员权限启动当前执行的脚本。

这段代码的主要部分是 start-process '%~sdpnx0' -verb runas,其中 %~sdpnx0 是一个批处理脚本中的变量替换,表示当前执行的批处理脚本文件的全路径名。-verb runas 参数指示 start-process 使用提升的权限运行进程。

但是,这个命令在 powershell 中并不会直接以管理员权限运行当前脚本,因为 %~sdpnx0 这个变量替换在 powershell 中不会被正确解析。在 powershell 中,你可以使用 $pscommandpath 变量来获取当前脚本的完整路径,然后使用 start-process 命令以管理员权限运行它。

下面是一个修改后的 powershell 命令,它可以以管理员权限运行当前脚本:

start-process "$pscommandpath" -verb runas

如果你想要这个命令在执行后自动退出,你可以在命令的末尾添加 & exit,如下所示:

start-process "$pscommandpath" -verb runas & exit

请注意,这些命令应该在 powershell 脚本中使用,而不是在批处理文件中。批处理文件中应使用不同的语法。

组合使用

提供两种组合方式,代码放于批处理前面使用即可,其他自由组合

:: 方式一
reg query "hku\s-1-5-19">nul 2>&1||(powershell -command "start-process '%~sdpnx0' -verb runas"&&exit)
:: 方式二
reg query "hku\s-1-5-19">nul 2>&1||mshta vbscript:createobject("shell.application").shellexecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

自动用管理员身份运行bat

将以下代码加在开头

第一种:

@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" )
pushd "%cd%"
cd /d "%~dp0"

第二种:

@ echo off
%1 mshta vbscript:createobject("shell.application").shellexecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
:admin

更多内容可以参考这篇文章 让bat批处理以管理员权限运行的实现方法

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

快速掌握批处理脚本的基本技巧

09-08

slmgr命令(Windows软件授权管理工具)使用教程

11-25

windows系统下shutdown重启关机命令超详细教程

02-13

Windows批处理文件执行后中文乱码问题的解决方法

02-13

Windows定时删除指定路径下N天前的文件以及文件夹(脚本之家修正版)

07-05

批处理定时删除指定文件夹及子文件夹 bat脚本

07-05

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论