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

531652
ukanth

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

424
Я считаю, что термин, который вы ищете, это «повышенный» доступ. Даже если ваши учетные данные имеют разрешение администратора, процессы под вашими учетными данными не имеют прав администратора, пока вы не выполните команду sudo. В Windows они называют это «поднять». surfasb 10 лет назад 7
Просто используйте `su` и вашу команду. Это открывает новый экземпляр powershell, который работает от имени администратора. IGRACH 9 лет назад 0
@IGRACH не на моем PowerShell ... jiggunjer 8 лет назад 6
I use this `doskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"` William 5 лет назад 1

14 ответов на вопрос

258
Davy Landman

Команда runas .

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

Просто беги:

runas /noprofile /user:Administrator cmd 

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

Возможно, вы захотите загрузить профиль (например, включая переменные среды) для любого расширенного использования. В этом случае удалите `/ noprofile`. Richard 14 лет назад 21
Вы также должны убедиться, что у учетной записи администратора есть пароль. В противном случае вы получите ошибку 1327: «Ограничение учетной записи пользователя. Возможные причины: пустые пароли запрещены, ...» lilbyrdie 13 лет назад 3
Это не работает для меня. После того, как я ввел свой пароль, командная строка закрывается. Jonas 13 лет назад 5
Чтобы эта команда работала, флажок «Учетная запись отключена» в свойствах пользователя должен быть снят. Mike Glenn 13 лет назад 1
@Jonas, у тебя может быть переименованная учетная запись администратора. У меня была такая же проблема JP Hellemons 12 лет назад 2
это не спрашивает пароль администратора? sudo просит *** ваш *** пароль! n611x007 11 лет назад 54
К сожалению, это серьезно устарело. Runas просто запускает команды с другим набором учетных данных. Даже если ваши учетные данные имеют права администратора, это не означает, что все процессы под вашими учетными данными запускаются от имени администратора. surfasb 10 лет назад 14
Может ли скрипт предоставить пароль? jcalfee314 10 лет назад 0
@naxa Да, это не совсем sudo. Но вы можете изменить `/ user: Administrator` на` / user: YourLoginName` и, конечно же, сделать то же самое, что и sudo. Не совсем понимаю комментарий @surfasb. Когда это укусит тебя? Я успешно использовал этот трюк для редактирования файлов, которые могут редактировать только администраторы (например, `runas / noprofile / user: myUserName" C: \ path \ to \ Vim \ vim73 \ gvim.exe C: \ some \ file.cfg «`) ruffin 9 лет назад 2
Не работает для меня Он просто запрашивает пароль (будь то MyLoginName или администратор) и просто запускает команду в обычном режиме. Я проверил его, запустив `taskmgr`, и даже после ввода пароля он говорит" * 740: запрошенная операция требует повышения прав. * ". Запуск `calc` работает, так как не требует повышения прав. laggingreflex 9 лет назад 1
@surfasb, что если вы запустите любую программу из cmd после запуска runas / user: Administrator? barlop 8 лет назад 0
+1 за "устаревшие", так как runas не может обойти UAC. Вместо этого нажмите кнопку Windows, введите cmd и нажмите Ctrl + Shift + Enter. mellow-yellow 8 лет назад 9
@ barlop: Вы должны посмотреть, как работает UAC. Учетная запись администратора по умолчанию автоматически поднимает процесс до прав администратора. Это совпадение, что он работает с учетной записью администратора. Используйте любую другую учетную запись в группе администраторов ** с * runas *, и ваша программа по умолчанию не получит разрешения администратора. surfasb 8 лет назад 2
https://chocolatey.org/packages/Sudo cIph3r 6 лет назад 1
116
matt wilkie

Сегодня я обнаружил 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 .

Болевая точка, которую облегчает повышение, - это эскалация определенного процесса из непривилегированной оболочки, а затем продолжение в обычном режиме. Без этого вам нужно запустить привилегированную командную строку, щелкнув правой кнопкой мыши> «Запуск от имени администратора», что не может быть легко написано в сценарии, перед попыткой привилегированной команды.

Это прекрасно сочетается с «Поднять без запроса» в secpol.msc. Вместе они делают то же самое, что и `% wheel ALL = (ALL) NOPASSWD: ALL` в sudo. sayap 12 лет назад 4
@sayap, просто чтобы прояснить, ты имеешь в виду это: http://ss64.com/nt/syntax-uac.html? matt wilkie 12 лет назад 2
Да, это один Из моего ограниченного тестирования, он работает сразу, без перезагрузки Windows. sayap 12 лет назад 0
Здесь есть похожая программа с таким же названием: http://wintellect.com/cs/blogs/jrobbins/archive/2007/03/27/elevate-a-process-at-the-command-line-in-vista. ASPX Janus Troelsen 11 лет назад 0
Единственная проблема, которую я нахожу с elevate (v1.3.0), заключается в том, что он не возвращает код ошибки из программы, которую он поднимает. Ken 10 лет назад 5
Sudo.bat: `@elevate% *` => прибыль! Joe DF 10 лет назад 2
-1 это требует проработки. Я только что попробовал `C: \> elevate dir`, и это вызвало всплывающее окно, предлагающее мне, если я хочу поднять. Это не очень полезно в сценарии. barlop 10 лет назад 0
@barlop: цель elevate не обойти или обойти UAC (контроль учетных записей), а работать с ним. Пока UAC включен, * должен * быть какой-то запрос в какой-то момент процесса. Если вам нужно полностью избавиться от запроса, вы должны отключить UAC (см. 2-й комментарий). Проблема, которую решает проблема elevate, заключается в эскалации определенного процесса из непривилегированной оболочки и затем в обычном режиме. Без этого вам нужно запустить привилегированную командную строку, щелкнув правой кнопкой мыши «Запуск от имени администратора», который не может быть записан в сценарии, прежде чем пытаться выполнить привилегированную команду. matt wilkie 10 лет назад 0
@ barlop, хорошо. Я вижу, что не понимаю природу вашей жалобы и не знаю, как еще попытаться ее решить. matt wilkie 10 лет назад 0
`alias sudo = 'elevate -w'` Jürgen Paul 9 лет назад 0
Откройте explorer.exe как другой пользователь с полномочиями и как администратор? Kiquenet 9 лет назад 0
@Kiquenet - это тот же подход, что и `runas` в других ответах, с похожими результатами и отличиями от * elevate *, не так ли? matt wilkie 9 лет назад 1
Было бы неплохо упомянуть, что это внешняя утилита, в которой отсутствует OOTB. Hi-Angel 7 лет назад 7
66
Simon P Stevens

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

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

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

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

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

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

Уверены ли вы? Когда я запускаю sudo в Ubuntu, если моя текущая тема находится в `~ / .themes`, тогда приложение sudo-ed не сможет получить доступ к этой теме, потому что оно не в` / home / root / .themes`, и будет используйте некрасивую тему gtk по умолчанию. hasen 14 лет назад 2
@hasen j - ваша проблема только в том, что ~ / .themes оценивает перед запуском команды (и, следовательно, прежде чем она переключится на root). Jared 12 лет назад 5
Windosu предлагает другое решение, кроме размещенного на GitHub: https://github.com/tehsenaus/windosu. Я только что нашел его, и, похоже, оно отлично работает. Любимая вещь - это супер просто установить. Просто "npm установить -g windosu". Venryx 6 лет назад 1
39
Quog

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

Потрясающе - именно то, что я искал. Я не хотел запускаться, так как у команды есть другой пользователь, только для запуска с повышенными привилегиями. orip 14 лет назад 0
Именно правильное решение этой проблемы! Кто хочет Runas с его грязным синтаксисом? Stabledog 14 лет назад 0
Я часто хотел, чтобы команда повышения была встроена в окна. Это фантастический инструмент. nhinkle 13 лет назад 1
теперь есть [Коллекция Elevation PowerToys] (http://blogs.technet.com/b/elevationpowertoys/) того же автора, из которого [Создание самоподъемного сценария] (http://blogs.technet.com/b /elevationpowertoys/archive/2010/06/20/creating-a-self-elevating-script.aspx) особенно актуально. matt wilkie 12 лет назад 0
@nhinkle Можете ли вы сделать команду поднять так, чтобы она подавляла всплывающее окно с вопросом, хотите ли вы поднять ее? barlop 10 лет назад 0
@ barlop конечно нет. Это победило бы цель UAC. nhinkle 10 лет назад 1
@nhinkle, ограничивающий эффективность технического пользователя / требующий его внимания для средней задачи подтверждения повышенного уровня, не является его целью (его цель состоит в том, чтобы предотвратить злонамеренную атаку, а не удлинить процесс для законных вещей), но, очевидно, это что-то что можно утверждать, что это, к сожалению, должно сделать. Однако теперь, если какая-либо программа может работать с повышенными правами автоматически (разрешение не требуется), хотите ли вы, чтобы она была уничтожена, поскольку она победила «цель UAC»? barlop 10 лет назад 0
@ barlop Суть UAC в том, что вы не можете работать с повышенными правами без разрешения пользователя. Если бы вы могли просто набрать «elevate what.exe» и запустить его с повышенными правами, то для злоумышленника было бы тривиально запустить «elevate nasty-virus.exe». Это неотъемлемое требование UAC, чтобы подтверждение происходило как-то. Он не может запросить подтверждение в командном окне, поскольку подтверждение должно выполняться на изолированном безопасном рабочем столе, чтобы другие программы не могли вводить нажатия клавиш. nhinkle 10 лет назад 0
@nhinkle Я знаю об этом и не оспариваю это. Вы не совсем ответили на вопрос, который я задал вам в конце моего комментария, но это не важно, не важно! ;-) barlop 10 лет назад 0
Кажется, @barlop не понимает UAC. Если вы хотите, чтобы ваш сценарий прекратил подсказку, вам нужно временно отключить UAC - для этого требуется как минимум один запрос в начале сценария. Хотя я думаю, что в новых версиях Windows даже это стало сложнее. Или, может быть, запустить каждый процесс с повышенным cmd. jiggunjer 8 лет назад 0
Чтобы спросить только один раз, сценарий должен иметь отдельный компонент, который затем будет выполнять административные действия. Paul Stelian 6 лет назад 0
26
Maximus

Если вы готовы перейти на альтернативные приставки, есть 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 in ConEmu/Windows

csudo давно был включен в дистрибутив ConEmu. Ссылка не нужна вообще. Maximus 10 лет назад 1
Проблема в том, что новая вкладка консоли становится непригодной для использования после команды sudo'd. Таким образом, вы не можете продолжить работу на вкладке с повышенными правами, просто получите сообщение `нажмите Enter или Esc для выхода`. jiggunjer 8 лет назад 0
Конечно, вы не можете. Даже в Unix вы вернулись в невысокий терминал после выполнения команды `sudo`! Вы идете неправильным путем. Maximus 8 лет назад 1
1) если вы собираетесь открыть новое окно или вкладку, вы можете также сохранить его, пусть * пользователь * выберет, хотят ли они продолжить. 2) На моем Ubuntu мне не нужно каждый раз судо, повышение, я думаю, длится несколько минут. 3) это приложение имеет миллион вариантов, но ничего для этого? Может быть, я избалован. jiggunjer 8 лет назад 1
23
vulcan raven

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

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

  1. Откройте PowerShell.

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

$script_path="$HOME\Documents\Scripts"; if (!(test-path $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 -gt 1)}" | 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 
Мне нравится решение PowerShell для этого вопроса. Это должен быть самый простой способ поднять что-то. Существующие .bat файлы могут быть легко преобразованы в POSH Mitchell Skurnik 11 лет назад 1
Получил эту ошибку на Windows 10: `. : Файл C: \ Users \ User \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1 не может быть загружен, так как в этой системе отключен запуск сценариев. sowrov 8 лет назад 0
@sowrov, см. [эту статью] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). По умолчанию сценарии PowerShell отключены при любой установке Windows. Вам нужно включить его с помощью этой команды `set-executepolicy remotesigned`. Другие параметры, кроме `remotesigned`, описаны в [официальных документах] (https://technet.microsoft.com/en-us/library/ee176961.aspx). vulcan raven 8 лет назад 0
Читатели отмечают, что этот скрипт ps является оболочкой для функциональности `powershell -c start -verb runas program.exe`. Также обратите внимание, что вы * не можете поднять * как это с приглашением cmd (изначально). Powershell - лучший нативный вариант. jiggunjer 8 лет назад 0
20
GAThrawn

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

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

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

3
diimdeep

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

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

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

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

Оболочка Hamilton C решает эту проблему с помощью настоящего su и sudo. su позволяет запустить команду от имени другого пользователя; sudo (фактически псевдоним su) позволяет запустить команду с повышенными правами. Вы также можете сделать оба, работая с повышенными правами как другой пользователь. Текущие каталоги, переменные окружения и длинные командные строки передаются посредством рукопожатия совместно используемой памяти между su, выполняющимся в контексте вызывающего, и его копией, выполняемой как интерлюдия с новыми учетными данными, которые затем запускают дочерний элемент. Полное раскрытие: я автор.

1
Charles Milette

This script does the job:

@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 

Save it as sudo.cmd then add it to your PATH

Note: the runas means in this context "Run as administrator" and not "Run as other user"

Taken from here and slightly edited to remove cscript.exe header from output

Это создает новую консоль. Новое окно исчезнет после выполнения команды sudo'd, так что вы даже не сможете прочитать вывод. jiggunjer 8 лет назад 1
К сожалению, да. Но его можно использовать для некоторых базовых команд (копирование), инструментов с графическим интерфейсом или для открытия административного командования. Charles Milette 8 лет назад 0