42

Есть ли способ запустить программу или команду с повышенными правами, когда я уже нахожусь в командной строке без повышенных прав?

Точно такое же действие, которое будет выполнено, когда я нажму на ярлык программы и выберу Запуск от имени администратора.

Команда runas, вероятно, не является решением - она запрашивает пароль, но я просто хочу диалог UAC .

8 ответов8

45

Есть способ сделать это в PowerShell:

PS> Start-Process powershell -Verb runAs
15

Похоже, эта утилита - Hidden Start - будет делать то, что вы хотите, если вы используете ключ /uac. Вот пример командной строки:

hstart /UAC "notepad.exe"

Это вызовет диалог UAC вместо того, чтобы запрашивать пароль, как это делает runas.

3

Опираясь на ответ Рустама, вы можете:

  • Создайте командный файл su.bat где-нибудь в вашем стандартном% PATH% со следующей однострочной: @powershell start -verb runas %*
  • Добавьте эту функцию в свой профиль PowerShell $ : function su {start -verb runas @args}

Теперь вы можете ввести su <command> [parameters] в любой оболочке!

2

Это работает для меня на всех платформах, включая Windows 10. Мои потребности просты, возможно, вы сможете адаптировать подход, если вам нужна сила.

Я придумал небольшой скрипт с именем sudo.cmd названный для команды Linux sudo. Это работает достаточно хорошо, это думаю. Я обрисовал в общих чертах требования, шаги, которым нужно следовать, и сценарий в нижней части с примером. Сначала слово предупреждения.

ВНИМАНИЕ: Команда запускается в системном каталоге Windows по умолчанию. Вы хотите , чтобы cd - диск где - то безопасное первым.

требования:

  • Запустите команду с правами администратора из Windows.CMD
    или оболочка cmd.
  • требуется обычная проверка привилегий Windows в команде
    • Другими словами, команда НЕ будет работать, пока я не вошел в систему с привилегированной учетной записью.
  • Выполните команду с правами администратора и продолжайте при вызове внутри скрипта. Так что дождитесь завершения команды.
  • Будь простым, чтобы он всегда работал
  • Не нужно вводить пароль каждый раз, если я уже залогинен.
    • Лучшим способом было бы, если бы я мог ввести пароль один раз, как это делает настоящая команда sudo в Linux.

решение:

  1. Создайте командный скрипт для выполнения всех переданных аргументов, sudo.cmd
  2. Создайте ярлык Windows для командного сценария с именем: sudo.lnk .
  3. Поместите sudo путь Windows, чтобы его можно было увидеть.
  4. Отредактируйте свойства ярлыка, сделайте пустым Путь Start in:
  5. Нажмите кнопку [ Advanced ] - установите флажок « Run as Administrator
  6. Включите ярлыки в вашем пути к Windows, используйте переменную окружения PATHEXT, а именно.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Когда вы вводите sudo dir в командной строке, Windows покажет

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Всплывающее окно контроля доступа. Если вы нажмете «[ NO ]», ничего не произойдет. Windows покажет сообщение « Access is denied. ».

Когда вы нажимаете «[ YES ]», команда каталогов запускается с повышенными привилегиями. Конечно, вы, вероятно, хотите что-то более интересное, например, остановку или запрос к службе:

 sudo sc query SDRSVC

SDRSVC - это имя службы для "Службы резервного копирования Windows", в отдельном окне Cmd показано следующее:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

Сам скрипт sudo.cmd очень прост . Как я уже сказал, мои потребности просты. Я просто хочу остановить и запустить сервисы, пока я развертываю код для тестирования.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

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

2

RunAdmin - это небольшая утилита (150 КБ), которая позволяет запускать программу из командной строки с повышенными правами (она отображает UAC). А напротив Hidden Start есть бесплатная.

0

Взгляните на Start++ - он обладает этой функциональностью и множеством других полезных вещей. Для запуска с приглашением UAC просто используйте sudo затем имя вашей программы в командной строке, как показано здесь:

альтернативный текст

Вот некоторые другие функции (вы также можете добавить свои):

альтернативный текст

альтернативный текст

0

Это работает для Windows 10, не проверялось с другими версиями Windows.

Пример, чтобы открыть блокнот с правами администратора из cmd.exe, который запускает powershell, который запрашивает повышенные разрешения.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Это даст вам диалоговое окно UAC (если включено) с [Да] [Нет] или запросит пароль администратора.

Другой пример, чтобы открыть файл hosts с помощью блокнота:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Дополнительная информация: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6.

-1

Вы можете установить __COMPAT_LAYER = RunAsAdmin. Тогда команды будут выполняться в отдельном cmd с повышенными правами.

пример летучей мыши:

;Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
;Disable elevation
set __COMPAT_LAYER=
;continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Все параметры режима совместимости перечислены в наборе средств для обеспечения совместимости приложений MS.

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