7

Как проверить, имеет ли текущий пакетный скрипт права администратора?

Я знаю, как заставить его вызывать себя с помощью runas, но не знаю, как проверять права администратора. Единственные решения, которые я видел, это грубые хакерские работы.

4 ответа4

5

Вы всегда можете сделать что-то подобное

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] моей настоящей проблемой было повышение прав, но неинвазивная проверка является частью этого:

0

Это лучший kludge, который я мог придумать, используя стандартные команды:

net user %username% | findstr /r Administrator.
if %errorlevel% == 1 (
echo This is not an admin account
) else (
echo This is an admin account
)
-1

Вам просто нужна эта линия наверху ваших партий, которые требуют повышения. акцент на "одной линии"

nul 2> & 1 fsutil dirty query% systemdrive% || echo CreateObject ^("Оболочка.Применение "^).ShellExecute "% ~ 0", "ELEVATED", "", "runas", 1> "getadmin.vbs" && "getadmin.vbs" && exit /b

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .