2009-09-17 09:24:35 +0000 2009-09-17 09:24:35 +0000
463
463

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

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

Ответы (15)

272
272
272
2009-09-17 09:29:46 +0000

Команда runsas .

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

Просто запустите:

runas /noprofile /user:Administrator cmd

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

128
128
128
2011-04-12 06:42:00 +0000
  • 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 (User Account Control), а для того, чтобы работать с ним. Пока UAC включена, has должен быть какой-то подсказкой в some точке процесса. Если вам нужно полностью избавиться от подсказок, вам нужно отключить UAC .

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

Это хорошо работает с “Elevate без подсказок” в secpol.msc. Вместе они делают то же самое, что и %wheel ALL=(ALL) NOPASSWD: ALL в sudo

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

Если ваша мышечная память застряла в sudo, создайте псевдоним, используя Doskey : doskey sudo=elevate -w

или пакетный файл в PATH: @elevate -w %*

Elevate - это сторонняя утилита, написанная Johannes Passing . Это 11kb скачать и портативный (установка не требуется): http://code.kliu.org/misc/elevate/

67
67
67
2009-09-17 09:28:30 +0000

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

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

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

Если вы входите в систему как Боб и используете команду “runas james acommand”, то команда выполняется так, как будто она была запущена Джеймсом, поэтому она получает доступ к пользовательским настройкам Джеймса, а любые изменения пользователя попадают в папки James My Documents & settings, и т.д. Так что если вы устанавливаете приложение, скажем, оно будет установлено как James, а не как Bob.

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

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

41
41
41
2009-09-17 13:11:39 +0000

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

30
30
30
2012-10-26 07:52:13 +0000

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

24
24
24
2012-08-28 10:36:22 +0000

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

Три шага для добавления 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

Длинный метод обучения:

Note: Я смешал скрипт из обеих статей, чтобы создать вышеупомянутый скрипт. Вместо того, чтобы вручную вставить скрипт в блокнот, я добавил утверждения Out-File для сохранения ps1 и $profile файлов из скрипта.

Подсказка: Если вы, как и я, не очень любите всплывающие окна UAC, сохраните следующее в файле *.reg и запустите его:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
```.
19
19
19
2009-09-17 11:22:41 +0000

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

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

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

4
4
4
2011-11-17 15:24:50 +0000

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

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

3
3
3
2012-09-06 15:01:51 +0000

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

3
3
3
2018-06-14 18:44:28 +0000

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

choco install -y sudo

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

3
3
3
2019-11-07 16:12:24 +0000

Я написал gsudo , садо для окон, который чувствует себя как *nix sudo и имеет несколько убийственных функций:

  • Выполнить в текущей консоли (прилагается) без нарушения вкладки-клавиши авто-завершения. Или добавьте -n для запуска в новом окне.
  • надежно обрабатывает все сценарии для использования в скриптах. (ExitCodes, StdIn/Out/Err Redirection/Capture)
  • Поддерживает Cmd/PowerShell/PowerShell Core
  • Кэш учетных записей: Если gsudo вызывается несколько раз в течение нескольких минут, он показывает всплывающее окно UAC только один раз.

Использование

gsudo Открывает повышенную оболочку в текущей консоли.

gsudo [options] {command} [arguments]Производит указанную команду с повышенными правами.

Наиболее релевантные [options]:

  • -n | --new Запускает команду в консоли new с повышенными правами (и возвращается немедленно).
  • -w | --wait Принудительно дождитесь окончания процесса (и верните код выхода).
  • -s | --system Запуск под учетной записью локальной системы (“NT AUTHORITY\SYSTEM”).
  • --copyev Скопируйте все переменные окружения в сессию с повышенными правами перед выполнением.

Установка

  • Использование Scoop: scoop install gsudo
  • Использование Chocolatey: choco install gsudo
  • Установка вручную
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
1
1
1
2014-11-26 09:45:34 +0000

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

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

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

1
1
1
2017-11-20 19:58:47 +0000

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

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

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
0
0
0
2018-02-01 21:29:20 +0000

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

0
0
0
2016-01-10 21:08:24 +0000

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

@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 из выходных данных.

Questões relacionadas

3
19
10
28
2