Есть ли какая-нибудь команда sudo для Windows?


448

Я всегда работаю с учетной записью без прав администратора на моем компьютере с Windows. Иногда мне нужно установить программы, которые требуют доступа администратора. Поскольку я в основном использую командную строку Windows, существует ли команда Windows для повышения привилегий, аналогичная команде терминала Linux sudo?


7
Я считаю, что термин, который вы ищете, это «повышенный» доступ. Даже если ваши учетные данные имеют разрешение администратора, процессы под вашими учетными данными не имеют прав администратора, пока вы не выполните команду sudo. В Windows они называют это «поднять».
Surfasb

7
@IGRACH не на моем
PowerShell

2
Я использую этоdoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
Уильям

1
Попробуйте мой wsudo, sudo-как инструмента для Windows , доступен в виде пакета шоколадного.
нос

Ответы:


266

Команда runas .

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

Просто беги:

runas /noprofile /user:Administrator cmd 

запустить командную оболочку от имени администратора


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

6
Это не работает для меня. После того, как я ввел свой пароль, командная строка закрывается.
Джонас

55
это не спрашивает пароль администратора? Судо просит ваш пароль!
n611x007,

15
К сожалению, это серьезно устарело. Runasпросто запускает команды под другим набором учетных данных. Даже если ваши учетные данные имеют права администратора, это не означает, что все процессы под вашими учетными данными запускаются от имени администратора.
Surfasb

12
+1 за "устаревшие", так как runas не может обойти 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в sudo.
2012 г.

2
@sayap, просто чтобы прояснить, ты имеешь в виду это: ss64.com/nt/syntax-uac.html ?
Мэтт Вилки

5
Единственная проблема, которую я нахожу с elevate (v1.3.0), заключается в том, что он не возвращает код ошибки из программы, которую он поднимает.
Кен

4
Sudo.bat: @elevate %*=> прибыль!
Джо Д.Ф.

10
Было бы неплохо упомянуть, что это внешняя утилита, в которой отсутствует OOTB.
Привет, Ангел,

67

Вы можете использовать команду runas, которая в некотором роде похожа, или вы можете проверить проект sudo для Windows в SourceForge, который добавляет команду sudo.

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

Допустим, у вас есть два пользователя. Боб - обычный пользователь, а Джеймс - администратор.

Если вы вошли в систему как Bob и используете «runas james acommand», команда запускается так, как если бы она была запущена James, поэтому она получает доступ к пользовательским настройкам James, а любые пользовательские изменения переходят в папки « Мои документы и настройки» James и т. Д. устанавливаем приложение, скажем, оно будет установлено как Джеймс, а не как Боб.

Если, с другой стороны, Боб выполняет команду «sudo acommand», команда по-прежнему запускается как Bob, но с повышенными правами доступа - точно так же, как команда sudo в Linux. Чтобы любой пользователь не мог использовать sudo, вы должны определить группу пользователей sudoers, которая содержит список обычных пользователей, которые имеют разрешение на повышение уровня с помощью sudo. Пользователи все еще должны предоставить учетные данные до повышения прав.

Иногда разница не важна, иногда это так, и я считаю, что обе команды могут быть полезны.


2
Ты уверен? Когда я запускаю sudo в Ubuntu, если моя текущая тема находится в, ~/.themesто приложение sudo-ed не сможет получить доступ к этой теме, потому что она не включена /home/root/.themes, и будет использовать уродливую тему gtk по умолчанию.
Хазен

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

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

39

Вы также можете использовать Script Elevation PowerToys .


Потрясающе - именно то, что я искал. Я не хотел запускаться, поскольку у команды есть другой пользователь, только для запуска с повышенными привилегиями.
orip

Именно правильное решение этой проблемы! Кто хочет Runas с его грязным синтаксисом?
Конюшня

1
Я часто хотел, чтобы команда повышения была встроена в окна. Это фантастический инструмент.
nhinkle

теперь есть коллекция Elevation PowerToys того же автора, из которой создание самоподъемного сценария особенно актуально.
Мэтт Уилки

1
@ barlop конечно нет. Это победило бы цель UAC.
nhinkle

29

Если вы готовы перейти на альтернативные приставки, есть ConEmu (я автор). Одна из его особенностей - возможность запуска как повышенных, так и не повышенных вкладок в одном окне ConEmu. Вкладки также могут быть запущены с разными учетными данными.

Для удобства пользователя существует пакетный файл 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

Быстрый метод:

Три шага, чтобы добавить sudo.

  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
Мне нравится решение PowerShell для этого вопроса. Это должен быть самый простой способ поднять что-то. Существующие .bat файлы могут быть легко преобразованы в POSH
Митчелл Скурник

Получил эту ошибку на 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 не вычисляет с Clink и без окон Clink не вычисляет вообще ...
PJJ

20

Если вы делаете это в Windows, то в дополнение к команде «Запуск от имени», как упоминалось в нескольких других ответах, есть также способы сделать это с помощью мыши.

Если вы удерживаете Shiftклавишу, щелкая правой кнопкой мыши по большинству исполняемых файлов в Windows, вы должны заметить несколько более сложных параметров. Одним из них является параметр « Run As...» (я думаю, что он называется « Run As Administrator» от Vista и далее).

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


4

Для этого есть шоколадная упаковка с удобным названием sudo . Вы можете установить пакет с chocolatey с помощью этой команды:

choco install -y sudo

Затем в любой оболочке Windows / MS, которую вы должны использовать, вы можете использовать sudoкак положено.


3

Surun - это бесплатное приложение с открытым исходным кодом, которое позволяет некоторым программам запускаться с правами администратора, без предоставления пароля, без изменения реестра пользователей или изменения переменных среды.

Когда я использовал Windows XP, это приложение мне очень помогло. Бета работает под Windows 7.


Surun делает отличную работу. Однако иногда под Windows 8 и 8.1 его настройки по умолчанию не идеальны. Поскольку он заменяет запуск Windows как функцию, вы не можете запустить командную строку, щелкнув правой кнопкой мыши на стартовом экране.
Вольф

3

Как вы, вероятно, обнаружили, runas позволит вам работать от имени другого пользователя, но он не может выполнять повышение прав и не пропускает текущие каталоги, переменные среды или длинные командные строки.

Оболочка Hamilton C решает эту проблему с помощью настоящего su и sudo. 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

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

1

Самым простым решением, на мой взгляд, является использование PowerShell для выполнения работы, которая является переносимой и предложит пользователю использовать UAC.

Вы можете просто запустить это в любой оболочке (cmd или powershell)

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.