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

50203
Lukas Cenovsky

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

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

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

42

8 ответов на вопрос

45
Rustam

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

PS> Start-Process powershell -Verb runAs 
Кажется, работает нормально. Из командной строки вы можете сделать, например, `powershell -Command" Start-Process "C: \ program.exe '-Verb runAs" ` marsze 9 лет назад 18
Это следует пометить как правильный / лучший ответ IMO - он работает без сторонних утилит. crimbo 8 лет назад 7
Создание из @marsze - Fwiw, [аргументы] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/start-process#-argumentlist) в простейшем случае идет в свое собственное значение в кавычках, например `powershell -Command" Start-Process 'gvim' 'c: \ windows \ system32 \ drivers \ etc \ hosts' -Verb runAs "`. Спасибо! ruffin 7 лет назад 4
Как я могу направить вывод командной строки с повышенными правами в мой в настоящее время выполняющийся сценарий? wheeler 6 лет назад 0
@wheeler, я почти уверен, что ты не сможешь этого сделать, но ты можешь вернуть код выхода: `$ p = Start-Process powershell -Verb runAs -ArgumentList" -Command `` "& {` `$ Host.SetShouldExit (123)} `` "" -PassThru; $ p.ExitCode` Rustam 6 лет назад 0
@Rustam Вы можете, [и я сделал] (https://gist.github.com/wheelerlaw/a426fb609715a2c7cc156c6aabb6076f) :) Это немного хакерски, но работает превосходно. wheeler 6 лет назад 0
15
JeffP

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

hstart /UAC "notepad.exe" 

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

Внимание: эта маленькая утилита стоит 20 $. Для тех, у кого маленький карман, используйте RunAdmin :) Rigel 7 лет назад 1
Это не подходит для Windows 10 will 6 лет назад 0
3
Nico57

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

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

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

2
Rigel

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

2
will

Это работает для меня на всех платформах, включая 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 также возвращается.

0
John T

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

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

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

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

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

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

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

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

C:\>start powershell -command "&" 

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

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

C:\>start powershell -command "&" 

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

-1
Michel

Вы можете установить __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\" /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.

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