Чи є якась команда 'sudo' для Windows?


449

Я завжди працюю над обліковим записом не адміністратора на своєму комп’ютері Windows. Іноді мені потрібно встановити програми, для яких потрібен доступ адміністратора. Оскільки я здебільшого використовую командний рядок Windows, чи існує команда Windows для ескалації привілеїв, подібно до термінальної команди Linux sudo?


7
Я вважаю, що термін, який ви шукаєте, - це "підвищений" доступ. Навіть незважаючи на те, що у ваших облікових даних є дозвіл адміністратора, процеси під вашими обліковими записами не мають дозволу адміністратора, поки ви не «вкажете» команду. У Windows вони називають це "піднесення".
surfasb

7
@IGRACH не на моїх повноваженнях ...
jiggunjer

2
Я використовую цеdoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
Вільям,

1
Спробуйте мій wsudo, sudoподібний інструмент для Windows, доступний у вигляді пакету Chocolatey.
нісраціо

Відповіді:


267

Команда рунас .

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

Просто запустіть:

runas /noprofile /user:Administrator cmd 

для запуску командної оболонки як адміністратор


22
Вам може здатися, що ви хочете завантажити профіль (наприклад, включаючи змінні середовища) для будь-якого розширеного використання. У такому випадку киньте /noprofile.
Річард

6
Це не працює для мене. Після того, як я набрав пароль, командна строка закривається.
Йонас

55
це не запитувати пароль адміністратора? sudo запитує ваш пароль!
n611x007

15
На жаль, це серйозно застаріло. Runasпросто запускає команди під іншим набором облікових даних. Незважаючи на те, що у ваших облікових даних є права адміністратора, це не означає, що всі процеси під вашими обліковими записами працюють як адміністратор.
surfasb

12
+1 для "застарілого", оскільки руни не можуть обійти UAC. Замість цього натисніть кнопку Windows, введіть cmd і натисніть Ctrl + Shift + Enter.
солодкий-жовтий

125

Сьогодні я виявив elevate, який "виконує команду з підвищенням привілеїв UAC. Це корисно для роботи всередині командних підказок або з пакетними файлами". Це не те саме sudo, що він змінює виконавця-виконавця на адміністратора, але його синтаксис набагато простіший у використанні, ніж runasвін може зберігати поточний каталог, що дозволяє використовувати відносні шляхи.

Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".

Мета Elevate - не обійти або обійти UAC (Контроль облікових записів користувачів), а працювати з ним. Поки UAC включений, в якийсь момент процесу має бути якесь підказка . Якщо вам потрібно взагалі позбутися від підказки, вам доведеться відключити UAC .

Полегшення больової точки зменшує ескалацію певного процесу з непривілейованої оболонки, а потім триває як зазвичай. Без цього вам потрібно запустити привілейований командний рядок, натиснувши правою кнопкою миші> "Запустити як адміністратор" , яку неможливо легко прописати, перш ніж спробувати привілейовану команду.


5
Це ідеально підходить для "Підняти без підказки" в secpol.msc. Разом вони роблять те саме, що і %wheel ALL=(ALL) NOPASSWD: ALLв судо.
sayap

2
@sayap, щоб було зрозуміло, ти це маєш на увазі: ss64.com/nt/syntax-uac.html ?
matt wilkie

5
Єдина проблема, з якою я стикаюся з elevate (v1.3.0), - це те, що він не повертає код помилки з програми, яку він піднімає.
Кен

4
Sudo.bat: @elevate %*=> прибуток!
Джо ДФ

10
Було б добре зазначити, що це зовнішня утиліта, відсутня OOTB.
Привіт-Ангел

67

Ви можете використовувати команду runas, яка є подібною, або ви можете переглянути sudo для проекту Windows у SourceForge, який додає команду sudo.

Різниця тонка:

Скажімо, у вас є два користувачі. Боб - звичайний користувач, а Джеймс - адміністратор.

Якщо ви входите як Bob і використовуєте "runas james acommand", команда виконується так, як ніби вона виконувалась Джеймсом, тому вона отримує доступ до налаштувань користувача James та будь-які зміни користувача переходять у папки James My Documents & Settings тощо. Отже, якщо ви встановлюють додаток, скажімо, він буде встановлений як Джеймс, а не як Боб.

Якщо з іншого боку, Bob робить "sudo acommand", команда все ще виконується як Bob, але з підвищеними дозволами - так само, як і команда Linux sudo. Щоб запобігти будь-якому користувачеві можливість користуватися судо, вам слід визначити групу користувачів судорів, яка містить список звичайних користувачів, які мають дозвіл на підвищення рівня використання судо. Користувачі все ще повинні надати облікові дані перед висотою.

Іноді різниця не важлива, іноді вона є, і я вважаю, що обидві команди можуть бути корисними.


2
Ти впевнений? Коли я запускаю sudo в ubuntu, якщо моя поточна тема в ~/.themesцьому, додаток sudo-ed не зможе отримати доступ до цієї теми, тому що вона не входить /home/root/.themes, і буде використовувати неприємну тему gtk за замовчуванням.
hasen

5
@hasen j - проблема полягає лише в тому, що ~ / .themes оцінює перед запуском команди (і, тим самим, перед тим, як вона перейде на root).
Джаред

1
Ще одне рішення, окрім хостингу на GitHub, - це windosu: github.com/tehsenaus/windosu Я щойно його знайшов, і він, здається, працює чудово. Улюблена річ, що це дуже просто встановити. Просто "npm install -g windosu".
Венрікс

39

Ви також можете використовувати PowerToys Script Elevation .


Дивовижне - саме те, що я шукав. Я не хотів запускати, оскільки команда має іншого користувача, лише запускати її з підвищеними привілеями.
Оріп

Саме правильне рішення цієї проблеми! Хто хоче Руна з його безладним синтаксисом?
Stabledog

1
Я часто хотів, щоб команда елевації була вбудована у вікна. Це фантастичний інструмент.
nhinkle

тепер є колекція Elevation PowerToys того самого автора, з якої Створення сценарію, що самовиражається , особливо актуальне.
matt wilkie

1
@barlop звичайно ні. Це перемогло б призначення УАК.
nhinkle

29

Якщо ви готові перейти на альтернативні консолі, є ConEmu (я автор). Одна з його особливостей - можливість запускати як підвищені, так і невисокі вкладки в одному вікні ConEmu. Вкладки також можуть бути запущені з різними обліковими записами.

Для зручності користувача є batch-файл csudo.cmd (який може бути легко прийнятий у програму bash). Прочитайте повний опис у вікі проекту . Якщо коротко, наприклад, коли ви запускаєте якусь команду із наявної вкладки, що не є підвищеною

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

ConEmu запуститься dismв новій підвищеній консолі / вкладці (з попереднім підказом UAC у вікні Vista або вході в XP).

За замовчуванням csudoзапускається нова консоль у розділі (може бути змінена за допомогою редагування csudo.cmdвмісту).

І звичайно, ви можете перейменувати його, sudo.cmdякщо вам подобається "класичне" sudoслово.

sudo в ConEmu / Windows


1
csudo давно було включено до дистрибуції ConEmu. Посилання взагалі не потрібне.
Максим

Проблема тут у тому, що нова вкладка консолі стає непридатною після команди sudo'd. Таким чином, ви не можете продовжувати працювати на підвищеній вкладці, просто отримайте press enter or esc to exitповідомлення.
jiggunjer

1
Звичайно, ти не можеш. Навіть на Unix ви повертаєтесь до невисокого терміналу після того, як sudoкоманда виконала свою роботу! Ви йдете неправильним шляхом.
Максим

1
1) якщо ви збираєтесь відкрити нове вікно або вкладку, ви можете також зберегти його, нехай користувач вибере, чи хоче він продовжувати. 2) На моєму ubuntu мені не доводиться кожен раз судити, підняття триває кілька хвилин. 3) у цієї програми є мільйон варіантів, але нічого для цього немає? Можливо, я зіпсований.
jiggunjer

24

Швидкий метод:

Три кроки, щоб додати судо.

  1. Відкрийте PowerShell.

  2. Скопіюйте такий скрипт (Ctrl + C) і вставте його в PowerShell (Alt + Space + E + P):

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
  1. Удар Enter.

Він буде постійно вмикати sudoкоманду в PowerShell.

Використання:

sudo <process-name> [param1 [param2 [param3]]]

Приклади:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Довгий метод навчання:

Примітка. Я змішав сценарій з обох статей, щоб створити вищезгаданий сценарій. Швидше вручну вставляючи сценарій у блокнот, я додав Out-Fileзаяви для збереження ps1та $profileфайли із сценарію.

Порада: Якщо ви не дуже прихильник спливаючих вікон UAC (як я), збережіть наступне у файлі * .reg та запустіть його:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1
Мені подобається вирішення цього питання. Це має бути найпростішим способом підняти щось. Існуючі файли .bat можна легко перетворити на POSH
Mitchell Skurnik

Отримала цю помилку в Windows 10:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov

@sowrov, див. [цю статтю] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). За замовчуванням сценарії PowerShell відключені на будь-якій установці Windows. Потрібно ввімкнути це за допомогою цієї команди set-executionpolicy remotesigned. Крім того, інші параметри remotesignedописані в офіційних документах .
вулкан ворон

Читачі відзначають, що цей ps-скрипт є обгорткою для powershell -c start -verb runas program.exeфункціональності. Також зауважте, що ви не можете підняти подібне підказкою cmd (спочатку). Powershell - найкращий рідний варіант.
jiggunjer

чи можна зробити те ж саме в cmd.exe замість powershell env? powershell не обчислює клік та без вікна кліку зовсім не обчислює ...
PJJ

20

Якщо ви робите це в Windows, то крім команди Run As, як зазначено в парі інших відповідей, є також способи зробити це за допомогою миші.

Якщо ви утримуєте Shiftклавішу, клацнувши правою кнопкою миші на більшості виконуваних файлів у Windows, слід помітити ще кілька додаткових варіантів. Один з них - це Run As...варіант " " (я думаю, що він називається " Run As Administrator" від Vista далі).

Ви також можете завантажити більш вдосконалену версію RunAs від Microsoft, що називається ShellRunAs , вона має вдосконалення щодо вбудованої команди RunAs, як в командному рядку, так і в графічному режимах, включаючи збереження даних облікового запису


4

Для нього є шоколадний пакет із зручною назвою sudo . Ви можете встановити пакунок з шоколадом за допомогою цієї команди:

choco install -y sudo

Тоді в будь-якій оболонці Windows / MS ви не зможете використовувати, sudoяк очікували.


3

Surun - безкоштовна програма з відкритим кодом, яка дозволяє певним програмам працювати з адміністративними правами, не надаючи пароль, не змінюючи реєстр користувачів або змінюючи змінні середовища.

Коли я використовував Windows XP, ця програма мені дуже допомагає. Beta працює під Windows 7.


Сурун робить чудову роботу. Однак іноді для Windows 8 та 8.1 його за замовчуванням не ідеально. Оскільки він замінює запуск Windows як функцію, ви не в змозі запустити командний рядок правою кнопкою миші на екрані запуску.
Вовк

3

Як ви, напевно, виявили, runas дозволить вам запускатись як інший користувач, але він не може робити піднесення, і він не передає поточні каталоги, змінні середовища або довгі командні рядки.

Оболонка Hamilton C вирішує це з справжнім су і судо. su дозволяє запускати команду як інший користувач; sudo (власне псевдонім su) дозволяє вам виконувати команду підвищеною. Ви також можете робити і те, і інше, піднявшись, як інший користувач. Поточні каталоги, змінні середовища та довгі командні рядки передаються за допомогою спільної передачі пам’яті між su, що працює в контексті абонента, та копією самого себе, що працює як інтермедія з новими обліковими записами, які потім запускають дитину. Повне розкриття: Я автор.


1

Робочою sudoзаміною minttyтерміналу Cygwin буде розміщення наступного сценарію в PATH користувача:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

Для мене це єдина життєздатна заміна для отримання привілеїв таких програм, як vimабо cygrunsrvпід час роботи в терміналі в Windows.


1

Цей сценарій виконує цю роботу:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

Збережіть його, а sudo.cmdпотім додайте його у свою ПАТУ

Примітка: runasзасоби в цьому контексті "Запустити як адміністратор", а не "Запустити як інший користувач"

Взято звідси і трохи відредаговане, щоб видалити заголовок cscript.exe з виводу


1
Це створює нову консоль. Нове вікно зникне після завершення команди sudo'd - тому ви навіть не можете прочитати вихід.
jiggunjer

На жаль, так. Але він може бути використаний для деяких основних команд (копія), інструментів графічного інтерфейсу або відкриття адмін cmd.
Чарльз Мілетт

1

На мою думку, найпростіше рішення - використовувати повноваження, щоб виконати роботу, яка є портативною і підкаже користувача за допомогою UAC.

Ви можете просто запустити це в будь-якій оболонці (cmd або powerhell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"

0

Наступний сценарій vbs робить для мене трюк. Я поклав цеC:\Windows\System32

Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

Приклад використання в командному рядку sudo net start service

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