429

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

14 ответов14

260

Команда runas .

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

Просто беги:

runas /noprofile /user:Administrator cmd 

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

119

Я обнаружил, что 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.

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

66

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

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

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

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

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

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

39

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

27

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

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
20

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

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

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

3

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

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

3

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

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

3

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

choco install -y sudo

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

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

Самым простым решением, на мой взгляд, является использование 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .