|
|
本帖最后由 RENaa_FD 于 2025-12-25 23:32 编辑
最常见的权限提升方式是通过mshta执行VBS通过RunAs弹出UAC请求来实现:- %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close) && exit
复制代码 但是我最近才发现在最新的win11上,这行批处理完全失效了,查了一些信息后发现现在win11默认禁用mshta执行VBS
遂用PowerShell重写:- %1 powershell -NoProfile -Command "Start-Process cmd -ArgumentList '/c','%~s0','::' -Verb RunAs" 2>nul && exit
复制代码 但PowerShell不能覆盖mshta存在的所有windows版本
故优先PowerShell,若失败(不包括UAC拒绝)则回退使用mshta:- %1 setlocal EnableDelayedExpansion && (powershell -NoProfile -Command "try { Start-Process cmd -ArgumentList '/c','%~s0','::' -Verb RunAs } catch { exit 999 }" 2>nul && exit ) || if "!errorlevel!" neq "999" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close) && exit
复制代码 我不太喜欢 权限提升失败则继续执行 以及 生硬的直接exit ,所以做了一些额外修改:- %1 setlocal EnableDelayedExpansion && (powershell -NoProfile -Command "try { Start-Process cmd -ArgumentList '/c','%~s0','::' -Verb RunAs } catch { exit 999 }" 2>nul && exit /b) || if "!errorlevel!" equ "999" (exit /b) else mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close) && exit /b
复制代码 这行批处理即是我最终使用的版本,从win xp到win11均有效,但实在是有点复杂,各位大神若有更好的想法可以讨论讨论 |
|