Я всегда работаю с учетной записью без прав администратора на моем компьютере с Windows. Иногда мне нужно установить программы, которые требуют доступа администратора. Поскольку я в основном использую командную строку Windows, существует ли команда Windows для повышения привилегий, аналогичная команде sudo
терминала Linux?
14 ответов
Команда runas .
runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program
Просто беги:
runas /noprofile /user:Administrator cmd
запустить командную оболочку от имени администратора
Я обнаружил, что 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.
Болевая точка, которую облегчает повышение, - это эскалация определенного процесса из непривилегированной оболочки, а затем продолжение в обычном режиме. Без этого вам нужно запустить привилегированную командную строку, щелкнув правой кнопкой мыши> "Запуск от имени администратора", что не может быть легко написано в сценарии, перед попыткой привилегированной команды.
Вы можете использовать команду runas, которая в некотором роде похожа, или вы можете проверить проект sudo для Windows в SourceForge, который добавляет команду sudo.
Разница тонкая:
Допустим, у вас есть два пользователя. Боб - обычный пользователь, а Джеймс - администратор.
Если вы вошли в систему как Bob и используете "runas james acommand", команда запускается так, как если бы она была запущена James, поэтому она получает доступ к пользовательским настройкам James, а любые пользовательские изменения переходят в папки « Мои документы и настройки» James и т.д. устанавливаем приложение, скажем, оно будет установлено как Джеймс, а не как Боб.
Если, с другой стороны, Боб выполняет команду "sudo acommand", команда все равно запускается как Bob, но с повышенными правами доступа - точно так же, как команда sudo в Linux. Чтобы любой пользователь не мог использовать sudo, вы должны определить группу пользователей sudoers, которая содержит список обычных пользователей, которые имеют разрешение на повышение с помощью sudo. Пользователи все еще должны предоставить учетные данные до повышения прав.
Иногда разница не важна, иногда это так, и я считаю, что обе команды могут быть полезны.
Вы также можете использовать Script Elevation PowerToys.
Если вы готовы перейти на альтернативные приставки, есть 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.
Откройте 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
- Нажмите 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
Длинный метод обучения:
- Прочитайте эту статью.
- Прочитайте комментарии.
- Посмотрите на 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, то в дополнение к команде «Запуск от имени», как упоминалось в нескольких других ответах, есть также способы сделать это с помощью мыши.
Если вы удерживаете клавишу Shift при щелчке правой кнопкой мыши по большинству исполняемых файлов в Windows, вы должны заметить несколько более сложных параметров. Одним из них является параметр « Run As...
» (я думаю, что с Vista и далее он называется « Run As Administrator
»).
Вы также можете загрузить более продвинутую версию RunAs от Microsoft, которая называется ShellRunAs. Она имеет улучшения по сравнению со встроенной командой RunAs как в командной строке, так и в графическом режиме, включая возможность сохранения учетных данных учетной записи.
Как вы, вероятно, обнаружили, runas позволит вам работать от имени другого пользователя, но он не может выполнять повышение прав и не пропускает текущие каталоги, переменные среды или длинные командные строки.
Оболочка Hamilton C решает эту проблему с помощью настоящего su и sudo. su позволяет запустить команду от имени другого пользователя; sudo (фактически псевдоним su) позволяет запустить команду с повышенными правами. Вы также можете сделать оба, работая с повышенными правами как другой пользователь. Текущие каталоги, переменные окружения и длинные командные строки передаются посредством рукопожатия совместно используемой памяти между su, выполняющимся в контексте вызывающего, и его копией, выполняемой как интерлюдия с новыми учетными данными, которые затем запускают дочерний элемент. Полное раскрытие: я автор.
Surun - это бесплатное приложение с открытым исходным кодом, которое позволяет некоторым программам запускаться с правами администратора без предоставления пароля без изменения реестра пользователей или изменения переменных среды.
Когда я использовал Windows XP, это приложение мне очень помогло. Бета работает под Windows 7.
Для этого есть шоколадная упаковка с удобным названием sudo. Вы можете установить пакет с chocolatey с помощью этой команды:
choco install -y sudo
Затем в любой оболочке Windows/MS, которую вы используете, вы можете использовать sudo
как и ожидалось.
Рабочей заменой sudo
для mintty
терминала Cygwin будет размещение следующего сценария в пользовательской переменной PATH:
$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"
Для меня это единственная жизнеспособная замена для повышения привилегий программ, таких как vim
или cygrunsrv
при работе в терминале в Windows.
Этот скрипт выполняет свою работу:
@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 из вывода
Самым простым решением, на мой взгляд, является использование PowerShell для выполнения работы, которая является переносимой и предложит пользователю использовать UAC.
Вы можете просто запустить это в любой оболочке (cmd или powershell)
powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
Следующий скрипт 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