2013-04-12 5 views
1

Как я использую пакетные скрипты много, я потратил большое количество времени на поиск в сети для чистой пакетной реализации, , которая не зависит от чтения уровня ошибок, чтобы проверить права администратора текущего или указанного пользователя.Как проверить, является ли пользователь администратором?

Как я могу проверить, является ли пользователь администратором?

Примечание: Этот вопрос не является дубликатом, так как я не хочу полагаться на чтение ошибок.

+0

Я думаю, что у меня есть сценарий для работы с одним лайнером, чтобы проверить права администратора. Если я найду это, я отправлю ответ утром. Я думаю, что это было что-то вроде проверки прохода или отказа от использования icacls для чтения разрешений system32. – rojo

+0

@rojo: Я с нетерпением жду вашего ответа! :) – user1

+0

@ Christian.K: Я искал универсальное и несингулярное решение для команды/errorlevel, которое было написано только в пакетном режиме ... – user1

ответ

1

Не найден пакетный скрипт, который не пытался либо записать файл в системный каталог, либо полагаться на errorlevel. Я написал следующий скрипт для использования в других сценариях или в качестве автономного инструмента.

Вы можете изменить код для работы в скрипте или передать имя пользователя программе, чтобы определить, является ли пользователь администратором. Если имя пользователя не указано, программа проверяет администратор текущего пользователя.

@echo off 
setlocal EnableDelayedExpansion 
if "%~1" == "" (set user=%username%) ELSE (set user=%~1) 
net user %user% | find "Local Group Memberships">temp.tmp 
for /f %%a in ('findstr /i "Administrators" temp.tmp') do (
    echo. 
    echo %user% is Admin... 
    echo. 
    set isadmin=y 
    del temp.tmp 
    pause 
    goto:eof 
) 
echo. 
echo %user% is not Admin... 
echo. 
set isadmin=n 
del temp.tmp 
pause 
goto:eof 
+0

@ Danny Beckett: Спасибо за исправления! – user1

+1

Нет проблем! Добро пожаловать в переполнение стека! :) Помните, держите свой вопрос и ответ отдельно;) –

+0

@ Danny Beckett: Спасибо! Я сделаю все возможное. :) – user1

0

Существует простой способ проверить права администратора. Просто используйте команду OPENFILES и проверьте состояние. Для этого требуются привилегии администратора, поэтому вы можете просто передать вывод в nul и проверить результат. Я рекомендую вам использовать 2> nul, как показано, потому что 2012 Server и Windows 8 возвращают ERRORLEVEL 0, но вывод «ERROR: невозможно получить данные». Это кажется неправильным для меня (нет ошибки, но все же сообщение об ошибке), но ...

OPENFILES >nul 2>nul 
IF ERRORLEVEL 1 (
    ECHO.Right click on this file and select 'Run as administrator'. 
    PAUSE 
    GOTO :eof 
    ) 
+0

Это похоже на правильный ответ и не создает временный файл, так как мой скрипт делает это ... – user1

+0

Это выглядит аккуратно, но я боюсь, что это может привести к влиянию производительности на занятую систему с включенным флагом «поддерживать список объектов». (по крайней мере, я бы не рискнул) – noonex

+0

Я делаю это один раз при входе в bat-файл ... не один раз для каждой операции, требующей администратора. Поэтому я не думаю, что есть заметный удар производительности. – RGuggisberg

Смежные вопросы