Тема: CMD/BAT: наличие административных привилегий у текущего пользователя
Определение наличия административных привилегий у текущего пользователя (использование встроенных средств).
Метод основан на попытке выполнения некоей операции, которая возможна только с административными привилегиями, и оформления этого действа в виде процедуры в пакетном файле (результат помещается в переменную окружения «IsAdmin»).
Вариант 1. Попытка перечисления параметров реестра ветви «HKEY_USERS\S-1-5-19» (учётная запись «LOCAL SERVICE»):
@echo off
setlocal enableextensions enabledelayedexpansion
call :IsAdminTest IsAdmin
echo IsAdmin=%IsAdmin%
endlocal
exit /b 0
rem ==========================================================================
rem ==========================================================================
:IsAdminTest
setlocal enableextensions enabledelayedexpansion
"%systemroot%\system32\reg.exe" query "HKU\S-1-5-19" 1>nul 2>nul && set IsAdmin=1 || set IsAdmin=0
endlocal & set /a %~1=%IsAdmin%
exit /b 0
rem ==========================================================================
Вариант 2. Попытка запуска дефрагментатора «defrag.exe»:
@echo off
setlocal enableextensions enabledelayedexpansion
call :IsAdminTest IsAdmin
echo IsAdmin=%IsAdmin%
endlocal
exit /b 0
rem ==========================================================================
rem ==========================================================================
:IsAdminTest
setlocal enableextensions enabledelayedexpansion
"%systemroot%\system32\defrag.exe" /? 1>nul 2>nul
if "%errorlevel%" equ "2" (
set IsAdmin=1
) else (
set IsAdmin=0
)
endlocal & set /a %~1=%IsAdmin%
exit /b 0
rem ==========================================================================
Отдельное спасибо коллеге wisgest за исправление ошибок.