Як запустити програму з командного рядка з підвищеними правами


44

Чи є спосіб запустити програму або команду з підвищеними правами, коли я вже в команді, що не підвищений?

Точно та сама дія, яка була б виконана, коли я натискаю ярлик програми та вибираю Запустити як адміністратор .

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

Відповіді:


14

Схоже, ця утиліта - Прихований старт - зробить те, що ви бажаєте, якщо використовувати перемикач / uac. Ось приклад командного рядка:

hstart /UAC "notepad.exe"

Це з'явиться діалоговому вікні UAC, а не запитувати пароль, як це робить runas.

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


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
Rustam

6

Грунтуючись на Рустама «S відповідь , ви можете:

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

Тепер ви можете видавати su <command> [parameters]в будь-якій оболонці!


2

RunAdmin - це невелика утиліта (150 Кбіт), яка дозволяє запускати програму з командного рядка з підвищеними правами (вона покаже UAC). І навпроти прихованого старту - безкоштовно.


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ярлик у вашому Windows 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вікно адміністрування, він закривається, і ви не знаєте, чи працювала команда чи ні. Команда ERRORLEVELз повертається також.


2

Це працює для Windows 10, не тестовано в інших версіях Windows.

Приклад для відкриття блокнота з правами адміністратора від cmd.exe, який запускає shellhell, який запитує підвищені дозволи.

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

Це дасть вам діалогове вікно UAC (якщо воно ввімкнено) з [Так] [Ні] або запитає пароль адміністратора.

Ще один приклад відкриття файлу хостів із блокнотом:

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


Аргументи виконуваного файлу повинні бути -ArgumentListпараметром, а не просто додатковими параметрами для запуску.
Яблуко

0

Погляньте на Start ++ - він має цю функціональність разом із безліччю інших корисних речей. Щоб запустити підказку UAC, просто скористайтеся sudoіменем програми в командному рядку, як показано тут:

alt текст

Ось деякі інші функції (ви також можете додати власні):

alt текст

alt текст


Виглядає також добре, але я вже використовую 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.