批处理判断是否为管理员权限如果不是则自动获取管理权限
实际应用代码
@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批处理以管理员权限运行的实现方法
相关文章
Windows 批处理的应用小结(ProtoBuf编译自动化工具)
这篇文章主要介绍了Windows 批处理的应用(ProtoBuf编译自动化工具),下面使用构建一个将ProtoBuf源文件生成C++源文件以及C#源文件的自动化批处理工具为例,需要的朋友可以参考下2022-09-09bat文件与Vbs文件之间的常用操作(获取用户输入,执行VBS文件)
这篇文章主要介绍了bat文件与Vbs文件之间的常用操作(获取用户输入,执行VBS文件),需要的朋友可以参考下2022-11-11
最新评论