Есть ли команда «sudo» для Windows?
Я всегда работаю над учетной записью, отличной от администратора, на моем компьютере под управлением Windows. Иногда мне нужно установить программы, требующие доступа администратора. Поскольку в основном я использую командную строку Windows, есть ли команда Windows для эскалации привилегий, аналогичная команде терминала Linux sudo
?
14 ответов
Команда runas .
runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program
Просто запустите:
runas /noprofile /user:Administrator cmd
для запуска командной оболочки в качестве администратора
Я обнаружил поднять сегодня, когда "выполняет команду с повышением привилегий 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 (User Account Control), а работать с ним. Пока UAC включен, имеет , чтобы быть каким-то приглашением в some в процессе. Если вам нужно полностью избавиться от запроса, вы должны отключить UAC .
Устранение болевых точек повышает эскалацию определенного процесса из непривилегированной оболочки, а затем продолжается как обычно. Без этого вам нужно запустить привилегированное командное приглашение с помощью правой кнопкой мыши> «Запуск от имени администратора» , который не может быть легко написан сценарием, прежде чем пытаться выполнить привилегированную команду.
Вы можете использовать команду runas , которая является похожей, или вы можете проверить sudo для Windows над SourceForge , который добавляет команду sudo.
Разница тонкая:
Предположим, у вас есть два пользователя. Боб - обычный пользователь, а Джеймс - администратор.
Если вы входите в систему как Bob и используете «runas james acommand», команда запускается так, как если бы ее запускал Джеймс, поэтому он обращается к пользовательским настройкам Джеймса, и любые изменения пользователя переходят в James My Documents & папок настроек и т. д. Поэтому, если вы устанавливаете приложение, скажем, оно будет установлено как Джеймс, а не как Боб.
Если, с другой стороны, Боб делает «sudo acommand», команда все еще выполняется как Bob, но с повышенными разрешениями - точно так же, как команда sudo для Linux. Чтобы пользователь не мог судиться, вы должны определить группу пользователей sudoers, которая содержит список обычных пользователей, у которых есть разрешение на повышение с помощью sudo. Пользователям по-прежнему необходимо предоставить учетные данные перед повышением.
Иногда разница не важна, иногда это так, и я считаю, что обе команды могут быть полезны.
Вы также можете использовать скрипты Elevation PowerToys .
Если вы готовы перейти на альтернативные консоли, ConEmu (я автор). Одна из его функций - возможность запускать как увеличенные, так и невыполненные вкладки в одном окне ConEmu. Вкладки могут запускаться с разными учетными данными.
Для удобства пользователя существует пакетный файл csudo.cmd (который может быть легко принят в bash). Прочтите полное описание в вики проекта . Вкратце, когда вы запускаете какую-либо команду из существующей вкладки с невыполнением, например
csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess
ConEmu запустит dism
на новой повышенной консоли /вкладке (с предыдущим приглашением UAC в окне Vista или Login в XP).
По умолчанию csudo
запускает новую консоль в расколе (могут быть изменения с помощью редактирования содержимого csudo.cmd
).
И, конечно, вы можете переименовать его в sudo.cmd
, если вам нравится слово "classic" sudo
.
Быстрый метод:
Три шага для добавления sudo.
-
Откройте PowerShell.
-
Скопируйте следующий скрипт (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
- Хит Введите .
Он будет постоянно включать команду 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
Длинный метод обучения:
- Прочитайте эту статью .
- Прочитайте комментарии.
- Взгляните на хранилище git репозитория Стивена и файл readme .
Примечание. Я смешал сценарий из обеих статей, чтобы создать вышеупомянутый скрипт. Скорее вручную вставив скрипт в блокнот, я добавил операторы Out-File
для сохранения файлов ps1
и $profile
из сценария.
Совет. Если вы не очень любите всплывающие окна UAC (например, я), сохраните следующее в файле * .reg и запустите его:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
Если вы делаете это в Windows, то в дополнение к команде Run As, как упоминалось в нескольких других ответах, есть также способы сделать это с помощью мыши.
Если вы удерживаете клавишу Shift при щелчке правой кнопкой мыши по большинству исполняемых файлов в Windows, вы должны заметить еще несколько дополнительных опций. Один из них - это опция Run As...
"(я думаю, что она называется« Run As Administrator
»из Vista).
Вы также можете загрузить более продвинутую версию RunAs от Microsoft, называемую ShellRunAs , это улучшает встроенную команду RunAs, как в командной строке, так и в графическом режиме, в том числе позволяет вам сохранять учетные данные учетной записи
Surun - это бесплатное приложение с открытым исходным кодом, которое позволяет определенным программам работать с правами администратора, без предоставления пароля без изменения реестра пользователя или изменения переменных среды.
Когда я пользовался Windows XP, это приложение мне очень помогает. Beta работает под Windows 7.
Как вы, вероятно, обнаружили, runas позволит вам запускаться как другой пользователь, но он не может выполнять возвышение и не передает текущие каталоги, переменные окружения или длинные командные строки.
оболочка Hamilton C разрешает это с подлинным su и sudo. su позволяет запускать команду в качестве другого пользователя; sudo (на самом деле псевдоним su) позволяет вам выполнить команду повышенной. Вы также можете сделать то и другое, работая под повышенным уровнем как другой пользователь. Текущие каталоги, переменные окружения и длинные командные строки передаются посредством рукопожатия с общей памятью между su, выполняющимся в контексте вызывающего абонента, и копией самой работы, выполняемой как интерлюдия, с новыми учетными данными, которые затем запускают дочерние элементы. Полное раскрытие: я автор.
Этот скрипт выполняет задание:
@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
, затем добавьте его в свой PATH
Примечание: runas
означает в этом контексте «Запуск от имени администратора», а не «Запуск от имени другого пользователя»
взяты здесь и слегка отредактирован, чтобы удалить заголовок cscript.exe из вывода
Самое простое решение, на мой взгляд, заключается в том, чтобы использовать powershell для работы, которая является переносной и будет запрашивать пользователя с использованием UAC.
Вы можете просто запустить это в любой оболочке (cmd или powershell)
powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
Замените рабочую замену sudo
для терминала Cygwin mintty
, чтобы поместить следующий скрипт в PATH пользователя:
$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"[email protected]\"
Для меня это единственная жизнеспособная замена для повышения привилегий таких программ, как vim
или cygrunsrv
во время работы в терминале в Windows.
Следующий скрипт 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
Для него есть шоколадный пакет с удобным названием sudo . Вы можете установить пакет с шоколадным с помощью этой команды:
choco install -y sudo
Затем в любой оболочке Windows /MS, которую вы должны использовать, вы можете использовать sudo
, как ожидалось.