|
|
@ECHO OFF & PUSHD "%~DP0" & set "titl=f%random%"
reg QUERY "HKU\S-1-5-19" >nul 2>nul && goto :runas
set stat=0 & start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","%*",,"runas",1)(window.close)
::exit
:checktitl
if %stat% equ 2 (exit) else (timeout /t 1 /nobreak >nul & tasklist /v /fi "imagename eq cmd.exe" | findstr /i "管理员: %titl%" >nul && (if %stat% equ 0 set stat=1) ||(if %stat% equ 1 set stat=2) & goto :checktitl)
:runas
title %titl%
::自动提权批处理模板,适用于启用UAC且mshta和vbs正常的系统,文件名支持汉字字母数字空格和`~!#$)-_+[{]}'. 参数支持汉字字母数字和`~!@#$*()-_+\:'./? 不支持参数被双引号包裹
::如果注释第4行,则自动提权执行结束后才退出,用于start /wait方式被调用,如 start /wait "" "他 `~!#$)-_+[{]}'..cmd" a1 我`~!@#$*()-_+\:'./?
::以下为提权执行的脚本
echo 入参: %*
reg QUERY "HKU\S-1-5-19"
timeout /t 10 /nobreak >nul
特点见注释
部分流行模板个人印象:
fltmc>nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~dpnx0","%*",,"runas",1)(window.close)&&exit
好像是kkocdko原创的,优秀,很长一段时间都在用
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
最巧妙,一行搞定,利用入参注释符,省去了是否有权限的判断,但导致不支持被带参数提权
我见过的所有提权模板,当被start /wait 方式调用时,尝试提权后就会立即执行后续语句,无法等待提权执行结束后才执行后续语句,我这个模板实现了这个功能,当然是可选的,如果不需要这个,取消第4行的注释即可
mshta vbscript:CreateObject("Shell.Application").ShellExecute方式,适用于启用UAC且mshta和vbs正常的系统,在禁用UAC的系统上基本会死循环,除非用较长的脚本来特殊处理。
|
|