如何检查当前批处理脚本是否具有管理员权限?
我知道如何让它使用 runas 调用自身,但不知道如何检查管理员权限。我见过的唯一解决方案是粗暴的黑客行为。
答案1
你可以做这样的事情
mkdir "%windir%\system32\test" 2>nul
if "%errorlevel%" == "0" (rmdir "%windir%\system32\test" & echo Is admin) else (echo Not an Admin)
虽然不是最好的方法,但对我来说一直很有效。
答案2
经过一些研究(主要是 SO [1]),我发现这net
并不总是一个好的解决方案,它可能会显示假阴性结果。但是fsutil
WinXP 到 Win10 都有。值得阅读整个富有洞察力的答案“更多问题”针对这个问题批处理脚本:如何检查管理员权限那里。
以下是针对匆忙用户的简短答案:
fsutil dirty query %systemdrive% >nul
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Running without
)
[1]我的实际问题是海拔,但是非侵入性检查是其中的一部分:
答案3
这是我能想到的最好的解决方案,使用标准命令:
net user %username% | findstr /r Administrator.
if %errorlevel% == 1 (
echo This is not an admin account
) else (
echo This is an admin account
)
答案4
你只需要在需要提升的批次顶部加上这一行。强调“一行”
nul 2>&1 fsutil 脏查询 %systemdrive% || echo CreateObject^("Shell.Application"^).ShellExecute "%~0", "ELEVATED", "", "runas", 1 > "getadmin.vbs" && "getadmin.vbs" && exit /b