Как запустить команду sudo в windows

96

Как мне запустить следующую команду в Windows:

$ sudo django-admin.py startproject NEW

?

Давид542
источник
Лучше избегать использования терминальных команд в Windows. Вместо этого попробуйте сделать то же самое с помощью IDE, например Eclipse + PyDev. Это значительно упростит задачу.
Pushpak Dagade
8
@Pushpak Dagade: В общем, я был ошеломлен вашим комментарием, но когда я пошел напечатать это, я понял, что это ПЕРЕПОЛНЕНИЕ СТЕКА. Это люди, которые ДЕЙСТВИТЕЛЬНО используют терминал в Windows. =) Я имею в виду, что иначе PowerShell, скорее всего, не существовал бы.
Брент Риттенхаус,
2
Кроме того, что, если бы он создавал сценарий для автоматизации задачи? (Да, я понимаю, что вы можете запустить ЭТО как привилегированный пользователь.)
Брент Риттенхаус,
Попробуйте мой wsudo , sudo-подобный инструмент для Windows, доступный в виде пакета Chocolatey.
Носератион

Ответы:

102

В sudoWindows нет команды. Ближайший эквивалент - «запускать от имени администратора».

Вы можете сделать это с помощью runasкоманды с уровнем доверия администратора или щелкнув правой кнопкой мыши программу в пользовательском интерфейсе и выбрав «Запуск от имени администратора».

BlueRaja - Дэнни Пфлугофт
источник
4
Вы знаете, меняется ли поведение runas от версии к версии? Я установил Win7 Enterprise, и все комбинации, которые я пробовал с runas, создают новый cmd без прав администратора
notNullGothik
4
Sudo для Windows (sudowin) позволяет авторизованным пользователям запускать процессы с повышенными привилегиями, используя свою собственную парольную фразу. В отличие от команды runas, Sudo для Windows сохраняет профиль пользователя и права собственности на созданные объекты. Вы можете получить его здесь: sourceforge.net/projects/sudowin
Джо Биглер
Проверьте gsudo( stackoverflow.com/a/58753166/97471 ). Это sudo для окон с *nix sudoпользовательским интерфейсом: разрешение выполнять команду внутри текущей консоли и кеш учетных данных (только одно всплывающее окно UAC).
Херардо Гриньоли
runas - повышение учетной записи пользователя в Администраторах; sudo - другое дело. Это не должен быть общепринятым ответом.
Массимо
16

Откройте блокнот и вставьте этот код:

@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 для пребывания в текущем коде каталога.

Члены экипажа CME1
источник
Одна из проблем заключается в том, что после повышения вы больше не находитесь в текущей папке, а находитесь в папке C:\Windows\System32.
Носератион
2
@noseratio true, похоже, что изменение на это сработает, однако:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Адам Плохер
@AdamPlocher, это может работать, но могут возникнуть проблемы, если в командной строке %*есть кавычки. Вот почему я создал на основе wsudoPowerShell.
Носератио
Это повышение учетной записи пользователя в Администраторах; sudo - другое дело.
Массимо
Не могли бы вы просто пропустить echoпервую @и третью строки, добавив их к строке PowerShell?
nudl
14

Все ответы объясняют, как повысить вашу команду на новом хосте консоли.

Что меня позабавило, так это то, что ни один из этих инструментов не ведет себя так *nix sudo, как позволяет выполнять команду в текущей консоли.

Итак, я написал: gsudo

Исходный код https://github.com/gerardog/gsudo

Установка

Через совок

  • Установите совок, если у вас его еще нет. Затем:
scoop install gsudo

Или через Шоколадный

choco install gsudo

Ручная установка:

Демо

gsudo demo

Херардо Гриньоли
источник
9

Я создал инструмент командной строки wsudoс открытым исходным кодом sudoдля Windows для запуска программ или команд с повышенными правами в контексте текущего каталога . Он доступен как шоколадный пакет .

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

Установка

choco install wsudo

Chocolatey должен быть уже установлен.

Цель

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 .

7 оборотов
источник
2
Спасибо, что опубликовали "wsudo", для меня это очень полезно. Я думаю, что ваше преимущество wsudo заключается в том, что рабочий каталог не похож на альтернативы. Я не мог найти никого, кто может хранить CWD, кроме wsudo. Думаю, вам стоит выделить этот момент в описании. Я действительно ценю вашу работу.
benok 05
3
Еще одна вещь, о которой нужно сообщить. Вы знаете, как взломать адресную строку, чтобы открыть оболочку напрямую? Обычно я использую этот хак, но меня очень расстраивало, когда я хотел получить расширенную оболочку с помощью этого хака. Я пытался найти много альтернатив, но не работает. Наконец-то я могу открыть один с "wasudo [shell]". Я люблю это.
Еще
3
@benok, да, действительно полезный хак! Рад, wasudoчто тебе стало проще. Я сам в основном живу в интегрированном консольном терминале VSCode, поэтому просто набираю его wasudo:) Следующим улучшением будет наследование переменных среды .
Носератио 05
Привет @benok, возможно, вас заинтересует моя новая утилита для повышения производительности копирования / вставки / запуска, DevComrade :)
Noratio
5

runasкоманда требует, чтобы пользователи вводили пароль. Если вы не хотите вводить пароль и хотите просто щелкнуть диалоговое окно UAC, используйте Start-Process -Verb runasPowerShell вместо runascommand.

см .: http://satob.hatenablog.com/entry/2017/06/17/013217

САТО Юсуке
источник
Это повышение учетной записи пользователя в Администраторах; sudo - другое дело.
Массимо
4

Обычно вы этого не сделаете, так как в любом случае вы бы не запускали его под * nix. Выполняйте разработку в каталоге пользователя, а затем развертывайте его в системных каталогах.

Игнасио Васкес-Абрамс
источник
2

Следующий сценарий vbs позволяет запускать заданную команду с аргументами с повышением прав и имитирует поведение исходной команды sudo unix для ограниченного набора используемых случаев (он не будет кэшировать учетные данные и не позволяет действительно выполнять команды с разными учетными данными). Я его надел 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

Ceztko
источник
1
как мы можем заставить сценарий ждать ввода пользователя, чтобы мы могли прочитать вывод программы оболочки?
Ахмад Хаджар
1
Вы имеете в виду интерактивную команду оболочки? Что ж, сначала вы должны попытаться убедиться, что запущенная команда будет ждать возврата. Вот вроде возможно. Затем вы должны получить результат от объектов оболочки и вывести его, что, я думаю, также возможно. Однако не ожидайте, что все, что вы можете делать в unix, станет возможным.
ceztko
В Windows 10 выдает синтаксическую ошибку в строке 1, символ 6.
Мартин Браун,
Это повышение учетной записи пользователя в Администраторах; sudo - другое дело.
Массимо
1

Я думаю, что попробовал шаги ниже после некоторого исследования и преуспел

1. Установите scoop с помощью 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
}

Пример: открыть файл hosts от имени администратора в блокноте.

sudo notepad C:\Windows\System32\drivers\etc\hosts
Дэвид Хэтч
источник
0

Использование sudoкоманды для оконных пользователей дает вам следующие предложения:

Сначала установите scoopинструмент управления пакетами и выполните следующие команды:

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

Затем используйте scoopдля установки sudoкоманду:

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

Наконец, вы можете выполнить команду с помощью sudo:

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

Azjhong
источник
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, особенно потому, что вы не можете просто повторно использовать предыдущую команду с дополнительной опцией. Вам нужно указать аргументы вашей команды отдельно.

Вот пример использования команды маршрута для изменения шлюза:

Это не удается, потому что мы не находимся в 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
мивк
источник