Я ищу написать сценарий, который принимает пользовательский ввод, а затем вносит изменения всей системы. Мне нужно, чтобы это было очень общим, но, проще говоря, мне нужно, чтобы оно проверялось, запускается ли «как администратор». Если это не так, то я хочу показать сообщение, чтобы сказать им это; если это так, я хочу, чтобы это продолжалось. Есть ли постоянный способ проверить это? Я не хочу начинать новый сеанс с правами администратора, я просто хочу определить , запущен ли он как администратор
windows
command-line
Канадский Люк ВОССТАНОВИТЬ МОНИКУ
источник
источник
Ответы:
Нашел это на переполнении стека :
источник
net session >nul 2>&1 && echo Success || echo Failure
. Я считаю этот компактный синтаксис более удобным.Это проверяет высокий уровень целостности. (работает для Windows Vista и выше)
источник
whoami
отсутствует в XP.Многие, многие ответы на этот и многие другие вопросы в SE ( 1 , 2 , 3 и многие другие), каждый из которых так или иначе несовершенен, ясно показали, что Windows не предоставляет надежную встроенную утилиту , Итак, пришло время выкатить свои собственные.
Без дальнейших грязных хаков:
Скомпилируйте следующую программу (следуйте инструкциям) или получите предварительно скомпилированную копию . Это нужно сделать только один раз, затем вы можете скопировать его
.exe
везде (например, рядом с Sysinternals Suite ).Код работает в Win2k + 1 , как с UAC, так и с доменом, транзитивными группами и без них, независимо от того, что он использует - потому что он использует тот же способ, что и сама система при проверке разрешений.
chkadmin
выводит «Admin» или «Non-admin» и устанавливает код выхода равным 0 или 1 соответственно. Выход может быть подавлен с помощью/q
переключателя.chkadmin.c
:Для компиляции запустите в командной строке Windows SDK:
(при использовании VS2012 + необходимы дополнительные настройки, если вам необходимо настроить таргетинг на 2k / XP )
Метод предоставлен /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908.
1 MSDN утверждает, что API - это XP +, но это неверно.
CheckTokenMembership
это 2k +, а другой еще старше .источник
Я обнаружил, что самый простой способ проверки прав администратора с использованием сценария CMD выглядит примерно так:
Этот метод использует только встроенные CMD.exe, поэтому он должен быть очень быстрым. Он также проверяет действительные возможности процесса, а не проверяет SID или членство в группах, поэтому проверяется действующее разрешение. И это работает еще в Windows 2003 и XP. Обычные пользовательские процессы или процессы без прав доступа терпят неудачу при проверке каталога, где успешно выполняются процессы администратора или повышенные права.
Этот тест не пройден, если группа
Everyone
,BUILTIN\Users
или другая аналогичная группа получит разрешение на чтение для системного профиля. Разумеется, это нестандартная конфигурация, отличная от той, что установлена на компьютерах, настроенных как контроллеры домена Windows, которые дают права NT / AUTHORITY \ Authenticated Users на чтение / выполнение для системной профили.источник
verify
. Я склонен использоватьcd .
(cd space dot), который устанавливает errorlevel в 0, не производит вывод, а также полезен для создания файла нулевой длины черезcd . >somefile
. Тем не менее, я протестировал «dir» в Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8 и 10. Для всех этих «dir» сбросит уровень ошибки до 0 в случае успеха, если он был установлен до 'реж. Поэтому я не уверен, почему Уильям использовал «проверить», чтобы сначала очистить уровень ошибки.