Изнутри командного файла я хотел бы проверить, работаю ли я с правами администратора / с повышенными привилегиями.
Имя пользователя не меняется при выборе «Запуск от имени администратора», поэтому это не работает.
Если бы существовала общедоступная команда, которая не имеет никакого эффекта, но требует административных привилегий, я мог бы запустить ее и проверить код ошибки, чтобы проверить наличие привилегий. Пока не нашел такой команды. Похоже, что найденные мной команды возвращают один неспецифический код ошибки, который может указывать на что угодно, и они подвержены сбоям по разным причинам.
Меня волнует только Windows 7, хотя было бы неплохо поддерживать более ранние операционные системы.
windows
command-line
cmd
Джефф
источник
источник
echo > somefile
в каталоге, который потребует прав администратора. это создаст файл как побочный эффект, но вы можете проверить наличие коллизий и создать уникальное имя файла в качестве обходного пути.Ответы:
ДОБАВЛЕНИЕ : Для Windows 8 это не сработает; вместо этого см. этот отличный ответ .
Нашел это решение здесь: http://www.robvanderwoude.com/clevertricks.php
Предполагая, что это не работает, и поскольку мы говорим о Win7, вы можете использовать в Powershell следующее, если это подходит:
Если нет (и, вероятно, нет, поскольку вы явно предложили пакетные файлы), вы можете написать это в .NET и вернуть код выхода из exe на основе результата для использования вашим пакетным файлом.
источник
AT
не работает в Windows 8, но я нашел лучшее решение. Я разместил его как ответ на другой вопрос здесь: stackoverflow.com/questions/4051883/… .ping
заменять отсутствующиеsleep
:)Для этого трюка требуется только одна команда: введите
net session
в командной строке.Если вы НЕ являетесь администратором , вы получите сообщение об отказе в доступе.
Если вы являетесь администратором , вы получите другое сообщение, наиболее распространенное из которых:
Из MS Technet :
источник
There are no entries in the list.
в Windows 10 Pronet session >nul 2>&1 || (echo not admin&goto :eof)
Мне нравится предложение Рашио использовать AT, но это еще один вариант:
Этот подход также позволит вам различать неадминистратора и администратора без повышенных прав, если вы захотите. Администраторы без повышенных прав по-прежнему имеют BUILTIN \ Administrators в списке групп, но он не включен.
Однако это не будет работать в некоторых системах, отличных от английского. Вместо этого попробуйте
(Это должно работать в Windows 7, но я не уверен в более ранних версиях.)
источник
whoami/groups
а потом строчки вручную сканировать. Не займет много времени, и команда поместится в вашем мозгу.В значительной степени то, что другие ставили раньше, но как один лайнер, который можно поместить в начало пакетной команды. (Ну, обычно после @echo off.)
источник
Самый простой способ сделать это в Vista, Win 7 и выше - это перечислить группы токенов и найти текущий уровень целостности (или sid администратора, если важно только членство в группе):
Проверьте, работает ли мы на повышенном уровне:
Проверим, принадлежим ли мы к локальным администраторам:
Проверяем, принадлежим ли мы к администраторам домена:
В следующей статье перечислены идентификаторы безопасности, используемые окнами уровня целостности: http://msdn.microsoft.com/en-us/library/bb625963.aspx
источник
Вот небольшая модификация ответа Гарри, которая фокусируется на повышенном статусе; Я использую это в начале файла install.bat:
Это определенно сработало для меня, и принцип кажется правильным; от Криса Джексона из MSFT :
источник
решение:
не работает под Windows 10
для всех версий Windows можно сделать так:
источник
Я прочитал много (большинство?) Ответов, а затем разработал bat-файл, который у меня работает в Win 8.1. Думал, что поделюсь этим.
Надеюсь, кто-то сочтет это полезным :)
источник
Версия https://stackoverflow.com/a/38856823/2193477 "не однострочная"
источник
Я знаю, что очень опаздываю на эту вечеринку, но вот моя единственная подсказка, чтобы определить админку.
Он не полагается на уровень ошибок, а только на
systeminfo
:Он возвращает либо да, либо нет, в зависимости от статуса администратора пользователя ...
Он также устанавливает значение переменной «admin» равным да или нет соответственно.
источник
Если вы работаете как пользователь с правами администратора, тогда переменная среды SessionName НЕ будет определена, и у вас все еще нет прав администратора при запуске командного файла.
Вы должны использовать команду «net session» и искать код возврата ошибки «0», чтобы проверить права администратора.
Пример; - первый оператор эха - это символ звонка
net session >nul 2>&1 if not %errorlevel%==0 (echo echo You need to start over and right-click on this file, echo then select "Run as administrator" to be successfull. echo.&pause&exit)
источник
Вот простой метод, который я использовал в Windows 7 - Windows 10. Обычно я просто использую команду «IF EXIST» для проверки папки Windows \ System32 \ WDI \ LogFiles. Папка WDI существует при каждой установке Windows как минимум с 7 и далее, и для доступа к ней требуются права администратора. В папке WDI всегда есть папка LogFiles. Таким образом, запуск «ЕСЛИ СУЩЕСТВУЕТ» в папке WDI \ LogFiles вернет истину, если запускается от имени администратора, и ложь, если запускается не от имени администратора. Это можно использовать в пакетном файле для проверки уровня привилегий и перехода к любым командам, которые вы хотите, на основе этого результата.
Вот краткий фрагмент примера кода:
Имейте в виду, что этот метод предполагает, что разрешения безопасности по умолчанию для папки WDI не были изменены (что маловероятно в большинстве ситуаций, но см. Предостережение № 2 ниже). Даже в этом случае достаточно просто изменить код, чтобы проверить наличие другого общего файла / папки, требующего доступа администратора (System32 \ config \ SAM может быть хорошим альтернативным кандидатом), или вы даже можете создать свой собственный специально для этого цель.
Однако есть два предостережения относительно этого метода:
Отключение UAC, скорее всего, нарушит тот простой факт, что в любом случае все будет запускаться от имени администратора.
Попытка открыть папку WDI в проводнике Windows и затем щелкнуть «Продолжить» при появлении запроса добавит постоянные права доступа для этой учетной записи пользователя, что нарушит мой метод. Если это произойдет, это можно исправить, удалив учетную запись пользователя из разрешений безопасности папки WDI. Если по какой-либо причине пользователь ДОЛЖЕН иметь доступ к папке WDI с помощью проводника Windows, вам придется изменить код, чтобы проверить другую папку (как упоминалось выше, создание собственной папки специально для этой цели может быть хорошим выбором) .
Итак, по общему признанию, мой метод не идеален, так как его можно сломать, но это относительно быстрый метод, который легко реализовать, он в равной степени совместим со всеми версиями Windows 7, 8 и 10, и при условии, что я помню упомянутые предостережения, был на 100% эффективным для меня.
источник
Работает для Win7 Enterprise и Win10 Enterprise
источник