it-swarm.xyz

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

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

435
ukanth

Команда runas .

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

Просто беги:

runas /noprofile /user:Administrator cmd 

запустить команду Shell от имени администратора

262
Davy Landman

Я обнаружил elevate today, который "выполняет команду с повышением привилегий UAC. Это полезно для работы внутри командной строки или с пакетными файлами." Это не то же самое, что Sudo, он изменяет исполняющего пользователя на Administrator, но его синтаксис намного проще в использовании, чем 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 .

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

120
matt wilkie

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

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

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

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

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

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

66
Simon P Stevens

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

39
Quog

Если вы готовы перейти на альтернативные консоли, есть 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, если вам нравится «classic» Sudo Word.

Sudo in ConEmu/Windows

28
Maximus

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

Три шага, чтобы добавить 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
24
vulcan raven

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

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

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

20
GAThrawn

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

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

3
Nicole Hamilton

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

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

3
diimdeep

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

choco install -y Sudo

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

3
ypid

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

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"[email protected]\"

Для меня это единственная жизнеспособная замена для повышения привилегий программ, таких как vim или cygrunsrv, при работе в терминале в Windows.

1
karafior

Этот скрипт выполняет свою работу:

@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
Charles Milette

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

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

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

Следующий скрипт 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

Пример использования по команде Prompt Sudo net start service

0
ceztko