Как открыть cmd с повышенными правами с помощью командной строки для Windows?

109

Как открыть командную строку с повышенными привилегиями, используя командные строки в обычном cmd?

Например, я использую, runas /username:admin cmdно открытый cmd не кажется повышенным! Какие-нибудь решения?

пользователь2633882
источник
Я попробовал все ответы. Самый полезный ответ без какого-либо программного обеспечения и по крайней мере без действий - stackoverflow.com/a/40942828/9217577
TheGuardener

Ответы:

166

Я столкнулся с той же проблемой, и единственный способ открыть CMD от имени администратора из CMD заключался в следующем:

  1. Открыть CMD
  2. Напишите powershell -Command "Start-Process cmd -Verb RunAs"и нажмитеEnter
  3. Появится всплывающее окно с просьбой открыть CMD от имени администратора.
Gui
источник
2
Хороший ответ. Я добавил и отредактировал, как раньше, чтобы он запускался в одной командной строке!
Preet Sangha,
1
Я создал пакетный файл с этим и сохранил его как admincmd.bat в своей папке Windows, поэтому все, что мне нужно сделать, это ввести «admincmd», нажать Enter, и он откроет команду администратора. (Я также добавил еще одну строку в пакетный файл с помощью " exit ", чтобы закрыть окно cmd без администратора)
Тони Брикс
Почему бы не поместить cmd (и любые параметры) в конец. Наличие команды странно с точки зрения удобочитаемости.
Эрик Фоссум,
38

Согласно документации , модель безопасности Windows ...

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

У вас есть параметр Создать эту задачу с правами администратора в диалоговом окне Создание новой задачи ( Диспетчер задач> Файл> Запустить новую задачу ), но нет встроенного способа эффективного повышения привилегий с помощью командной строки.

Однако есть некоторые сторонние инструменты (внутренне полагающиеся на Windows API), которые вы можете использовать для повышения привилегий из командной строки:

NirCmd :

  1. Загрузите его и разархивируйте.
  2. nircmdc elevate cmd

windosu :

  1. Установите его: npm install -g windosu(требуется установленный node.js )
  2. sudo cmd
Рикардо Стювен
источник
3
Спасибо, nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1наконец-то заработало. Другими runas /user:...способами запрашивается пароль, несмотря на то, что вы уже являетесь администратором (убитый пакетный режим).
Маркос
Спасибо заnircmdc elevate cmd
tim
4
После intalling nircmd, чтобы он работать как Linux sudo, создать sudo.batфайл на своем пути с таким содержимым: nircmd elevate %*. Тогда вы можете сделать, например,sudo net stop W3SVC
Кип
1
Я думаю, что Windosu - это, безусловно, самый простой и элегантный способ сделать это, особенно если вы разработчик ... спасибо, чувак. Я чувствую, что нахожусь в системе nix: D
Эммануэль Махуни
любил windosu:)
Finlay Roelofs
32

У меня недостаточно репутации, чтобы добавить комментарий к верхнему ответу, но с мощью псевдонимов вы можете уйти, просто набрав следующее:

powershell "start cmd -v runAs"

Это просто укороченная версия отличного решения user3018703:

powershell -Command "Start-Process cmd -Verb RunAs"
Стиглер
источник
26

Простой способ, который я сделал, попробовав другие ответы здесь

Метод 1: БЕЗ сторонней программы (я использовал это)

  1. Создайте файл с именем sudo.bat(можно заменитьsudo любым именем) со следующим содержимым powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Переместите sudo.batв папку в вашемPATH ; если вы не знаете, что это значит, просто переместите эти файлы вc:\windows\
  3. Теперь sudoбудет работать в диалоговом окне «Выполнить» ( win+r) или в адресной строке проводника (это лучшая часть :))

Метод 2: с помощью сторонней программы

  1. Скачать NirCmd и разархивируйте его.
  2. Создайте файл с именем sudo.bat(можно заменитьsudo любым именем) со следующим содержимым nircmdc elevate cmd /k "cd /d %cd%"
  3. Переместите nircmdc.exeи sudo.batв папку в вашемPATH ; если вы не знаете, что это значит, просто переместите эти файлы вc:\windows\
  4. Теперь sudoбудет работать в диалоговом окне «Выполнить» ( win+r) или в адресной строке проводника (это лучшая часть :))
Дирадж Бхаскар
источник
В то время как решения работы, к сожалению , они приведут к UAC диалога , показывая на вершине (г порядка мудр) , но не получать внимание . (Проверено на Win10x64 v1607 build 14393.447.)
Ogmios
@Ogmios, это довольно странно. диалог работает правильно, если не инициирован таким образом? Я с удовольствием использовал это без таких проблем. Может это из-за какой-то другой конфигурации, которую вы изменили?
Дирадж Бхаскар,
Да, диалог UAC работает должным образом во всех других ситуациях (с которыми я сталкивался). Это единственное исключение. И, конечно, я изменил свою систему другими способами, но я не нашел ничего, что могло бы иметь скрытый эффект в этом диалоге.
Ogmios
@Ogmios, извини, дружище, я не могу придумать, что еще ты можешь сделать, чтобы это исправить. Возможно, вам стоит попробовать другие решения, чтобы узнать, подходят ли они вам. Cheers
Дирадж Бхаскар
Хотя PowerShell не является сторонней компанией, это не стандартная программа, и вы как бы пишете стороннюю программу для достижения цели.
undrline
13

Я постоянно использую программы nirsoft (например, nircmdc) и sysinternals (например, psexec). Они очень полезны.

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

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

Ответ средней длины : при повышенном уровне создайте задачу с (но я предпочитаю графический интерфейс планировщика задач):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Позже, когда высота не требуется, вызовите с помощью

schtasks /run /tn cmd_elev

Длинный ответ : много непонятных деталей; см. мою запись в блоге «Запуск программы БЕЗ UAC, полезно при запуске системы и в пакетных файлах (используйте планировщик задач)»

Джон В Кампф
источник
8

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

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
статлер
источник
5

Мой любимый способ сделать это - использовать PsExec.exe от SysInternals, доступного по адресу http://technet.microsoft.com/en-us/sysinternals/bb897553.

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

Переключатель "-h" творит чудеса:

-h Если целевая система Vista или выше, запускает процесс с повышенным токеном учетной записи, если он доступен.

Дэвид Родригес
источник
1
Чтобы это работало, вы должны отредактировать свойства psexec.exe и на вкладке совместимости установить флажок «Запуск от имени администратора». В противном случае вы получите сообщение об ошибке: PSEXESVC не установлен. Но psexec вызывает проблемы с клавишей табуляции в cmd.exe. Невозможно использовать вкладку для завершения имен папок.
Питер Куиринг,
Не уверен, в какой среде вы пробовали, но мне не нужно было изменять настройку «Запуск от имени администратора» (вы пытаетесь запустить cmd.exe на удаленном компьютере с вашего?). Также нет проблем с клавишей табуляции, я могу успешно заполнить имена файлов и папок (по крайней мере, протестировано на Win8.1 и Win10, работает как из командной строки cmd, так и из PowerShell)
Дэвид Родригес,
Я использую Win10 и запускаю его локально. Не знаю, почему это происходит со мной, а не с тобой. Я заставил nircmd работать, и это не вызывает проблем с вкладками.
Питер Куиринг,
Я также заметил, что нельзя выполнить автозаполнение с помощью клавиши табуляции, но, по крайней мере, это откроет приглашение cmd с повышенными правами в контексте другого пользователя, чего предыдущие методы выше, похоже, не достигли, когда я попытался. Флаг '-h' отличный (Windows 10), работает неплохо.
user1840734
4

Заставьте пакетный файл сохранить учетные данные фактической учетной записи администратора с помощью /savecredпереключателя. Это запросит учетные данные в первый раз, а затем сохранит зашифрованный пароль в диспетчере учетных данных. Затем все последующие запуски пакета он будет запускаться от имени полного администратора, но не запрашивать учетные данные, поскольку они хранятся в зашифрованном виде в диспетчере учетных данных, и конечный пользователь не может получить пароль. Следующее должно открыть CMD с повышенными правами с полными правами администратора и запрашивать пароль только в первый раз:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
Стефан Гадецкий
источник
3

В то время как решения , предоставляемых Dheeraj Bhaskar работы, к сожалению , они приведут к UAC диалога , показывая на вершине (г порядка мудр) , но не получать внимание (сфокусированное окно звонящего Cmd / PowerShell окна), таким образом , я либо необходимость возьмите мышь и нажмите «Да» или выберите окно UAC с помощью Alt + Shift + Tab. (Проверено на Win10x64 v1607 build14393.447; UAC = "[...] не затемнять [...]" .)

Следующее решение немного неудобно, поскольку оно использует два файла, но сохраняет правильный порядок фокуса, поэтому никаких дополнительных действий мыши / клавиатуры не требуется (кроме подтверждения диалога UAC: Alt + Y ).

  1. cmdadm.lnk (свойства ярлыка / Дополнительно ... / Запуск от имени администратора = ВКЛ) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Беги с su.

Огмиос
источник
К сожалению, я не могу это воспроизвести. Всякий раз, когда я использую любое из моих решений. Моя подсказка UAC сфокусирована и наверху
Дирадж Бхаскар
3

Я уже давно пользуюсь Elevate.

Это описание - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Я копирую bin.x86-64\elevate.exeиз .zipв C:\Program Files\elevateи добавляю этот путь в свой PATH.

Затем GitBash я могу запустить что-то вроде elevate sc stop W3SVCотключения IISслужбы.

Выполнение команды дает мне UACдиалог, правильно сфокусированный с помощью управления с клавиатуры, и после принятия диалога я возвращаюсь в свою оболочку.

seangwright
источник
3

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

сохраните этот сценарий как "god.cmd" в вашей system32 или в другом месте, куда вы укажете ....

если вы откроете cmd в e: \ mypictures \ и наберете god, он попросит вас ввести учетные данные и вернет вас в то же место, что и администратор ...

jOte-
источник
1
Powershell - это круто, но для этого нужны модули ... im oldscool ... просто нужна система ...
jOte
Работает ли этот метод / трюк для длинных путей / имен файлов? Или я должен использовать вместо этого «% ~ snx0» или «% ~ dpsnx0»?
script'n'code 01
2

Подобно некоторым другим решениям выше, я создал elevate пакетный файл, который запускает окно PowerShell с повышенными привилегиями, минуя политику выполнения, чтобы разрешить выполнение всего, от простых команд до пакетных файлов и сложных сценариев PowerShell. Я рекомендую поместить его в папку C: \ Windows \ System32 для удобства использования.

Исходная elevateкоманда выполняет свою задачу, захватывает вывод, закрывает порожденное окно PowerShell, а затем возвращается, записывая захваченный вывод в исходное окно.

Я создал два варианта, elevatepиelevatex , которые соответственно приостанавливают и оставляют окно PowerShell открытым для дальнейшей работы.

https://github.com/jt-github/elevate

И на случай, если моя ссылка когда-нибудь исчезнет, ​​вот код исходного командного файла повышения:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)
Shadow Lynx
источник
0

Можно использовать временную переменную среды для использования с ярлыком с повышенными правами (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (ярлык)

_ properties\advanced\"run as administrator"=yes

(чтобы внести изменения в путь, вам необходимо временно создать env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (targetCmd запускается в окне cmd с повышенными правами)

Хотя это 3 файла, вы можете поместить все (включая targetCmd) в какую-нибудь подпапку (не забудьте добавить имя папки к патчам) и переименовать "start.cmd" в одно имя цели.

Для меня это похоже на самый родной способ сделать это, в то время как cmd не имеет необходимой команды

ilia
источник
Я прочитал все вышеперечисленные решения и понял их. Я не понимаю твоих шагов. я выбираю решение с лучшими плюсами и минусами.
Дмитрий Лагода
0

Я не уверен, что программа ExecElevated.exe (13 КБ) справится с этой задачей .... но может. Или, по крайней мере, быть полезным для других с похожими потребностями, которые пришли на эту страницу, как и я (но я не нашел решения, поэтому в итоге я создал инструмент сам в .Net).

Он выполнит приложение с повышенным токеном (в режиме администратора). Но вы получите диалоговое окно UAC для подтверждения! (возможно, нет, если UAC отключен, не тестировал).

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

Пример использования:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
Мистер Кэлвин
источник
2
Мне просто нравятся ответы с «Это может работать, еще не проверено», и, конечно же, с «не уверен» ....
Гиридхар Карник
1
ссылка не работает.
Дмитрий Лагода
Ссылка восстановлена, извините за это
MrCalvin
0

В методе Дираджа Бхаскара с Powershell не хватает места, по крайней мере, для воплощения Powershell в Windows 10.

Командная строка внутри его sudo.bat должна быть

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

Обратите внимание на лишний пробел после% cd%

;) Frode

Фроде Северин Хатлевик
источник
0

Вот способ интеграции с проводником. При щелчке правой кнопкой мыши в любой папке в проводнике Windows появится дополнительный пункт меню:

Интеграция с проводником Windows

Вот шаги:

  1. Создайте этот ключ: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Измените его значение по умолчанию на то, что вы хотите отобразить в качестве текста пункта меню. Ex "DOS Shell as Admin"
  3. Создайте еще один ключ: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Измените значение по умолчанию на это, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "'"
  5. Это сделано. Теперь щелкните правой кнопкой мыши любую папку, и вы увидите свой элемент среди других элементов.

* Используйте pushd вместо cd, чтобы он работал на любом диске. :-)

Rribas
источник
-1

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

runas / профиль / пользователь: домен \ имя пользователя cmd

У меня это сработало, в вашей сети может быть иначе.

Шон Голаш
источник
-1

Просто используйте команду: runas / noprofile / user: administrator cmd

Thủy Chu
источник
-2

Я сделал это легко, используя следующую команду в cmd

runas / netonly / пользователь: Администратор \ Администратор cmd

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

Хариш Регада
источник
не помогло мне
Дмитрий Лагода
@DzmitryLahoda, можешь проинформировать меня об ошибке?
Хариш Регада
-2

Нажмите клавишу Windows + X, и теперь вы можете выбрать Powershell или командную строку с правами администратора. Работает, если вы админ. Функция может оказаться непригодной для использования, если система не ваша.

Том
источник
-5

Есть несколько способов открыть cmd с повышенными правами, но только ваш метод работает из стандартной командной строки. Просто нужно поставить usernot username:

runas /user:machinename\adminuser cmd

См. Соответствующую справку от сообщества Microsoft .

Мэтт
источник
4
Это не то же самое, что запускать команду с повышенными правами, потому что, когда я открываю окно cmd с повышенными правами и набираю «whoami», он дает тот же результат, что и окно без повышенных прав. Когда я запускаю whoami / all в обоих случаях, я вижу разницу в разрешениях для одного и того же пользователя.
Константино Кронембергер
-5

Я использовал, runas /user:domainuser@domain cmdкоторый успешно открыл приглашение с повышенными правами.

JasonC
источник
Для этого требуются учетные данные другого пользователя. Если вы уже являетесь администратором и хотите запускать с повышенными привилегиями, например, когда вы щелкаете правой кнопкой мыши приложение и выбираете запуск от имени администратора, а пароль не запрашивается, только диалоговое окно подтверждения, вам нужно что-то еще. Я пришел сюда в поисках ответа, но, похоже, его здесь нет.
Пол-Себастьян Маноле