Як запустити команду 'sudo' у Windows


92

Як запустити таку команду у вікнах:

$ sudo django-admin.py startproject NEW

?


Краще уникати використання команд терміналів у Windows. Натомість спробуйте зробити те саме за допомогою IDE, як Eclipse + PyDev. Це зробить речі набагато простішими.
Pushgade Dagade,

7
@Pushpak Dagade: Загалом, мене заперечив ваш коментар, але коли я пішов набирати це, я зрозумів, що це STACK OVERFLOW. Це люди, які РЕАЛІЗУЮТЬ термінал у Windows. =) Я маю на увазі, PowerShell, ймовірно, не існував би інакше.
Brent Rittenhouse,

2
Крім того, що, якби він створював сценарій для автоматизації завдання? (Так, я розумію, ти міг би запустити ЦЕ як привілейований користувач.)
Brent Rittenhouse

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

Відповіді:


97

У sudoWindows немає команди. Найближчим еквівалентом є "запуск від імені адміністратора".

Ви можете зробити це, скориставшись runasкомандою на рівні довіри адміністратора, або клацнувши програму правою кнопкою миші в інтерфейсі та вибравши "запустити від імені адміністратора".


4
Чи знаєте ви, чи поведінка рун змінюється залежно від версії? Я встановив Win7 Enterprise і всі комбінації, які я пробував з runas, створюють новий cmd без прав адміністратора
notNullGothik

4
Sudo для Windows (sudowin) дозволяє авторизованим користувачам запускати процеси з підвищеними привілеями за допомогою власної парольної фрази. На відміну від команди runas, Sudo для Windows зберігає профіль користувача та право власності на створені об'єкти. Ви можете отримати його тут: sourceforge.net/projects/sudowin
Джо Біглер,

Перевірте gsudo( stackoverflow.com/a/58753166/97471 ). Це Sudo для Windows з *nix sudoкористувацьким досвідом: Дозволяє виконувати команду в поточній консолі та кеш облікових даних (лише одне спливаюче вікно UAC).
Gerardo Grignoli

runas - це підвищення облікового запису користувача в Адміністраторах; Sudo - це інша справа. Це не повинно бути прийнятою відповіддю.
Массімо

14

Відкрийте блокнот і вставте цей код:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && %*'"
@echo on

Потім збережіть файл як sudo.cmd. Скопіюйте цей файл і вставте його C:\Windows\System32або додайте шлях sudo.cmdдо вашої змінної середовища PATH.

Коли ви відкриваєте командний рядок, ви можете запустити щось на зразок sudo start ..

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

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
@echo on

Пояснення:

powershell -Command запускає команду PowerShell.

Start-Process - це команда PowerShell, яка запускає процес, у цьому випадку - командний рядок.

-Verb RunAs запускає команду як адміністратор.

-Argument-List запускає команду з аргументами.

Наші аргументи такі '/c cd /d %CD% && %*'. %*означає всі аргументи, тому, якщо ви це зробили sudo foo bar, він буде виконуватися в командному рядку, foo barоскільки параметри foo і bar, і %*повертається foo bar. cd /d %CD%це команда для переходу до поточного каталогу. Це забезпечить, що коли ви відкриваєте підняте вікно, каталог буде таким самим, як і звичайне вікно. що &&означає , що якщо перша команда успішно, запустити другу команду.

Параметр /ccmd є для закриття вікна після завершення команди, а /kпараметр cmd - для збереження вікна відкритим.

Кредит Адам Plocher для перебування в поточному коді каталогу.


Однією з проблем цього є те, що коли ви підняті, ви перебуваєте не в поточній папці, а в C:\Windows\System32.
noseratio

2
@noseratio правда, схоже, якщо змінити його на це, це зробить трюк, проте:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Адам Плочер

@AdamPlocher, це може працювати, але може мати проблеми, якщо в командному рядку %*є лапки. Ось чому я створив wsudoна базі PowerShell.
noseratio

Це підвищення облікового запису користувача в Адміністраторах; Sudo - це інша справа.
Массімо

Чи не можете ви просто пропустити echoрядки перший і третій, @додавшись до лінії PowerShell?
нюдл

9

Усі відповіді пояснюють, як підвищити свою команду на новому хості консолі.

Мене потішило те, що жоден з цих інструментів не поводиться так *nix sudo, що дозволяє виконувати команду всередині поточної консолі.

Отже, я писав: gsudo

Вихідний код https://github.com/gerardog/gsudo

Встановлення

Через совок

  • Встановіть совок, якщо у вас його ще немає. Тоді:
scoop install gsudo

Або через Chocolatey

choco install gsudo

Встановлення вручну:

Демо

gsudo demo


8

Я створив схожий wsudoна відкритий код sudoінструмент CLI для Windows для запуску програм або команд з підвищеним правом у контексті поточного каталогу . Він доступний у формі шоколадної упаковки .

Я багато використовую його для таких речей, як налаштування агентів збірки, адмін, наприклад sfc /scannow, dism /online /cleanup-image /restorehealthабо просто для встановлення / оновлення локальних пакетів Chocolatey. Використовуйте на власний ризик.

Встановлення

choco install wsudo

Шоколадний повинен бути вже встановлений.

Призначення

wsudoє sudoподібним до Linux інструментом для Windows, щоб викликати програму з підвищеними правами (як Адміністратор) з командного рядка оболонки, що не є адміністратором, і зберігати поточний каталог.

Ця реалізація не залежить від застарілого Windows Script Host ( CScript). Натомість він використовує допоміжний сценарій PowerShell 5.1, який викликає "Start-Process -Wait -Verb runAs ..."командлет. Швидше за все, у вашій системі вже встановлено PowerShell 5.x, інакше вам запропонують встановити його як залежність.

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

wsudoзапускає програму або вбудовану команду з підвищеними правами в поточному каталозі. Приклади:

wsudo .\myAdminScript.bat 
wsudox "del C:\Windows\Temp\*.* && pause"
wasudo cup all -y
wasudox start notepad C:\Windows\System32\drivers\etc\hosts 

Щоб отримати докладнішу інформацію, відвідайте репро GitHub .


2
Дякуємо за публікацію "wsudo", це для мене досить корисно. Я думаю, що перевага вашого wsudo полягає в тому, що робочий каталог не схожий на альтернативи. Я не міг знайти жодного, який може тримати CWD, крім wsudo. Думаю, вам слід наголосити на цьому моменті в описі. Я дуже ціную вашу роботу.
Бенок

3
Повідомте ще одну річ. Чи знаєте ви, як зламати адресний рядок, щоб відкрити оболонку безпосередньо? Зазвичай я використовую цей хак, але мене дуже розчарувало, коли я хочу отримати підвищений рівень оболонки цим хаком. Я намагався знайти багато альтернатив, але не працює. Нарешті я можу відкрити один із "wasudo [shell]". Я люблю мати це. Ще раз спасибі :-)
benok

3
@benok, я люблю, це справді зручний хак! Радий, wasudoщо полегшив вам. Я сам переважно живу в інтегрованому консольному терміналі VSCode, тому просто вводжу wasudoтуди :) Наступним покращенням буде успадкування змін середовища .
noseratio

Привіт @ benok, Вас також може зацікавити моя нова утиліта для підвищення продуктивності копіювання / вставлення / запуску, DevComrade :)
noseratio

5

runasкоманда вимагає від користувачів набору пароля. Якщо ви не хочете вводити пароль і просто натисніть діалогове вікно UAC, використовуйте Start-Process -Verb runasв PowerShell замість runasкоманди.

див .: http://satob.hatenablog.com/entry/2017/06/17/013217


Це підвищення облікового запису користувача в Адміністраторах; Sudo - це інша справа.
Массімо

4

Зазвичай ви цього не робите, оскільки ви б не запускали його під * nix незалежно. Виконуйте розробку в каталозі користувача та розгортайте згодом до системних каталогів.





2

Наступний скрипт vbs дозволяє запускати задану команду з аргументами з піднесенням і імітує поведінку оригінальної команди unix sudo для обмеженого набору використаних випадків (він не кешує облікові дані та не дозволяє по-справжньому виконувати команди з різними обліковими даними). Я одягнув його 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


1
як ми можемо змусити скрипт чекати введення користувачем, щоб ми могли прочитати результати програми оболонки?
Ахмад Хаджар

1
Ви маєте на увазі інтерактивну команду оболонки? Ну, спочатку спробуйте переконатися, що запущена команда буде чекати повернення. Тут, здається, це можливо. Тоді ви повинні отримати вихідні дані з об'єктів оболонки та вивести їх, що, я думаю, це також можливо. Однак не сподівайтесь, що все, що ви можете зробити в unix, стане можливим.
ceztko

У Windows 10 він видає синтаксичну помилку в рядку 1 char 6.
Мартін Браун,

Це підвищення облікового запису користувача в Адміністраторах; Sudo - це інша справа.
Массімо

1

Думаю, я спробував кроки нижче після проведення деяких досліджень і досяг успіху

1.Встановіть совок, використовуючи PowerShell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. виконайте scoop install --global sudo 3. переконайтеся, що шляхи (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) додано до змінної шляху навколишнього середовища.


1

У Windows немає команди sudo, а також немає необхідності вводити $. Для встановлення Angular CLI через командний рядок node.js у Windows я просто написав npm install -g @ angular / cli, а потім натиснув Enter. Це спрацювало нормально.


0

відкрийте консоль як адміністратор. Клацніть правою кнопкою миші на командному рядку або bash -> більше та виберіть "запустити від імені адміністратора"


0

У Windows Powershell ви можете використовувати команду Start-Process з можливістю -Verb RunAsзапуску та підвищення рівня. Ось мій приклад функції sudo:

function sudo {
    Start-Process @args -verb runas
}

Приклад: Відкрити файл хостів як адміністратор у блокноті

sudo notepad C:\Windows\System32\drivers\etc\hosts

0

Використання sudoкоманди для користувачів вікон дає вам такі поради:

Спочатку встановіть scoopінструмент управління пакетами та виконайте такі команди:

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

Потім використовуйте scoopдля встановлення sudoкоманди:

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

Нарешті, ви можете виконати команду за допомогою sudo:

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


0

Я радий вам допомогти.

Щоб зробити команду sudo, виконайте кроки: -

  1. Зробіть папку env у C: \ Drive.
  2. Створіть папку всередині папки env з назвою bin.
  3. Тепер додайте C: \ env \ bin до вашого PATH.
  4. Створіть файл sudo.bat у C: \ env \ bin.
  5. Відредагуйте його за допомогою блокнота і напишіть цей код: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Сподіваюся, це допоможе вам


Ця відповідь повинна містити текст пакетного файлу, не залежати від посилання поза сайтом через гниття посилань. Також відповідь повинна містити застереження про те, що цей скрипт намагається наслідувати грубу поведінку sudo, але насправді не є sudo (це псевдо-sudo).
аскі

0

Щоб просто запустити команду в якості адміністратора в не піднятій Powershell, ви можете використовувати Start-Processбезпосередньо, зокрема, з правильними параметрами -Verb runas.

Це набагато складніше sudo, особливо тому, що ви не можете просто повторно використовувати попередню команду з додатковою опцією. Вам потрібно вказати аргументи для вашої команди окремо.

Ось приклад використання команди route для зміни шлюзу:

Це не вдається, оскільки ми не знаходимося в підвищеному PS:

> route change 0.0.0.0 mask 0.0.0.0 192.168.1.3
The requested operation requires elevation.

Це працює після прийняття UAC:

> Start-Process route -ArgumentList "change 0.0.0.0 mask 0.0.0.0 192.168.1.3" -Verb runas

Або для команди, яка вимагає cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.