Как запустить программу из командной строки с повышенными правами

44

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

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

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

Лукас Ценовский
источник

Ответы:

14

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

hstart /UAC "notepad.exe"

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

введите описание изображения здесь

JeffP
источник
2
Предупреждение: эта маленькая утилита стоит 20 $. Для тех, у кого маленький карман, используйте RunAdmin :)
WeGoToMars
Это не подходит для Windows 10
выйдет
50

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

PS> Start-Process powershell -Verb runAs
Рустам
источник
19
Кажется, работает нормально. Из командной строки вы можете сделать, например,powershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze
7
Это следует пометить как правильный / лучший ответ IMO - он работает без сторонних утилит.
Crimbo
5
Основываясь на @marsze - Fwiw, аргументы в простейшем случае переходят в свое собственное значение в кавычках, например powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Благодарность!
ruffin
Как я могу передать вывод командной строки с повышенными правами в мой в настоящее время выполняющийся сценарий?
Уилер
@wheeler, я почти уверен, что ты не сможешь этого сделать, но ты можешь вернуть код выхода:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Рустам
6

Основываясь на Рустама «S ответ , вы можете:

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

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

Николас Мелай
источник
2

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

WeGoToMars
источник
2

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

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

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

требования :

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

решение :

  1. Создайте командный скрипт для выполнения всех переданных аргументов, sudo.cmd
  2. Создание Windows , укороченные на имя команды скрипта: sudo.lnk.
  3. Поместите sudoярлык в окно PATH, чтобы его можно было увидеть.
  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окно администрирования, закроется, и вы не знаете, сработала ли команда. Команда ERRORLEVELfrom также возвращается.

воля
источник
2

Это работает для 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.

Alex
источник
Аргументы для исполняемого файла должны быть -ArgumentListпараметром, а не просто дополнительными параметрами для запуска процесса.
яблочная скорлупа
0

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

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

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

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

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

Джон Т
источник
Выглядит также хорошо, но я уже использую FARR, который имеет схожую функциональность с Start ++ и более (конечно, за исключением sudo).
Лукас Ценовский
2
Ссылка гласит Добро пожаловать на: brandontools.com. Эта веб-страница припаркована БЕСПЛАТНО. Хотите купить brandontools.com?
xmojmr
1
как говорит @xmojmr, этот сайт мертв. Если вы знаете новое место (я не нашел его так быстро), вам следует обновить ссылку в ответе.
Авель
-1

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

Пример .bat:

rem 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"
rem Disable elevation
set __COMPAT_LAYER=
rem 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.

Мишель
источник
Этот пакетный файл ужасно сломан. Вы не можете использовать ;в качестве разделителя комментариев. «Пакетные файлы не распознают точку с запятой и, как правило, вызывают сообщение об ошибке о неверной команде».
DavidPostill