Как определить, работает ли CMD от имени администратора или имеет повышенные привилегии? - PullRequest
81 голосов
/ 02 ноября 2011

Внутри командного файла я хотел бы проверить, работаю ли я с правами администратора или с повышенными правами.

Имя пользователя не изменяется при выборе «Запуск от имени администратора», поэтому оно не работает.

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

Меня интересует только Windows 7, хотя поддержка более ранних операционных систем была бы хорошей.

Ответы [ 11 ]

0 голосов
/ 06 октября 2018

Вот простой метод, который я использовал в Windows 7 - Windows 10. По сути, я просто использую команду «IF EXIST», чтобы проверить папку Windows \ System32 \ WDI \ LogFiles. Папка WDI существует при каждой установке Windows не менее 7 лет, и для доступа к ней требуются права администратора. В папке WDI всегда есть папка LogFiles. Таким образом, запуск «IF EXIST» в папке WDI \ LogFiles вернет true, если запуск от имени администратора, и false, если не от имени администратора. Это можно использовать в командном файле для проверки уровня привилегий и перехода к любым командам, которые вы пожелаете, основываясь на этом результате.

Вот краткий пример кода:

IF EXIST %SYSTEMROOT%\SYSTEM32\WDI\LOGFILES GOTO GOTADMIN
(Commands for running with normal privileges)

:GOTADMIN
(Commands for running with admin privileges)

Имейте в виду, что этот метод предполагает, что разрешения безопасности по умолчанию не были изменены в папке WDI (что вряд ли произойдет в большинстве ситуаций, но, пожалуйста, см. Предостережение № 2 ниже). Даже в этом случае это просто вопрос изменения кода для проверки другого общего файла / папки, который требует административного доступа (System32 \ config \ SAM может быть хорошим альтернативным кандидатом), или вы можете даже создать свой собственный специально для этого цель.

Есть два предостережения относительно этого метода:

  1. Отключение UAC, скорее всего, сломает его из-за простого факта, что все равно будет работать от имени администратора.

  2. Попытка открыть папку WDI в проводнике Windows и затем нажать «Продолжить» при появлении запроса добавит права постоянного доступа для этой учетной записи пользователя, что нарушит мой метод. Если это происходит, это можно исправить, удалив учетную запись пользователя из разрешений безопасности папки WDI. Если по какой-либо причине пользователь ДОЛЖЕН иметь возможность доступа к папке WDI с помощью проводника Windows, то вам придется изменить код, чтобы проверить другую папку (как упоминалось выше, создание собственного специально для этой цели может быть хорошим выбором) .

Итак, по общему признанию, мой метод не идеален, поскольку его можно сломать, но это относительно быстрый метод, который прост в реализации, одинаково совместим со всеми версиями Windows 7, 8 и 10, и при условии, что я буду помнить о упомянутые предостережения были на 100% эффективными для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...