最可靠的方法是用 net session 检测当前 cmd 窗口是否真正提权:uac 开启时仅“以管理员身份运行”的窗口能成功执行,普通权限下报“拒绝访问”并返回非零 errorlevel。
直接用 net session 最可靠——它不依赖组成员身份,只看当前 cmd 窗口是否真正提权。
用 net session 检测是否已提权
这是最推荐的方法。UAC 开启时,只有真正“以管理员身份运行”的命令行窗口才能成功执行该命令;普通权限下会报错“拒绝访问”,返回非零 errorlevel。
- 在 .bat 文件中写入:
@echo off
net session >nul 2>&1
if %errorlevel% == 0 (
echo 已获得管理员权限
) else (
echo 当前未以管理员身份运行
)
- 双击或运行脚本后,输出明确告诉你当前这个 CMD 实例有没有高完整性令牌。
- 注意:此法检测的是“进程是否提权”,而非“用户是否属于 Administrators 组”——二者常被混淆,但对脚本执行至关重要。
用 whoami /groups 查 Administrators 组 SID
适合判断账户本身是否具备管理员资格,但不能反映当前运行上下文是否已提权(例如:管理员账号也可能以标准用户模式启动 CMD)。
- 代码示例:
@echo off
whoami /groups | findstr /i "S-1-5-32-544" >nul
if %errorlevel% == 0 (
echo 用户属于 Administrators 组
) else (
echo 用户不在 Administrators 组中
)
- S-1-5-32-544 是 Windows 内置 Administrators 组的固定 SID,比匹配字符串 “Administrators” 更稳定,避免本地化语言干扰。
尝试写入 System32 目录
基于 Windows UAC 的保护机制:只有提权进程才能向 %windir%\System32 写文件。通过创建并立即删除临时文件来验证。
- 示例逻辑:
@echo off
set "tmpfile=%windir%\System32\__chkadmin__.tmp"
echo. > "%tmpfile%" 2>nul
if exist "%tmpfile%" (
del "%tmpfile%" >nul 2>&1
echo 可写入 System32,确认为管理员
) else (
echo 无法写入受保护目录
)
- 优点是原理直观;缺点是可能被安全软件拦截、或因磁盘满/权限策略异常而误判。
- 不建议用于生产脚本的唯一判断依据。
解析 whoami /priv 的完整性级别
Windows 使用完整性级别(IL)区分权限等级。管理员提权后,令牌完整性级别为 High;标准用户为 Medium。
- 可这样提取判断:
@echo off
for /f "tokens=2*" %%a in ('whoami /priv ^| findstr "Mandatory" 2^>nul') do (
if "%%b"=="High Mandatory Level" (
echo 完整性级别为 High,已提权
) else (
echo 完整性级别不足
)
)
- 该方法准确度高,但依赖
whoami /priv输出格式,部分精简版系统可能无此命令。 - 适合需要精细控制权限场景的高级脚本。










