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


109

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

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


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

Ответы:


166

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

  1. Открыть CMD
  2. Напишите powershell -Command "Start-Process cmd -Verb RunAs"и нажмитеEnter
  3. Появится всплывающее окно с просьбой открыть CMD от имени администратора.

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диалог, правильно сфокусированный с помощью управления с клавиатуры, и после принятия диалога я возвращаюсь в свою оболочку.


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, он попросит вас ввести учетные данные и вернет вас в то же место, что и администратор ...


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
)

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 не имеет необходимой команды


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

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, чтобы он работал на любом диске. :-)


-1

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

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

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



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


Для этого требуются учетные данные другого пользователя. Если вы уже являетесь администратором и хотите запускать с повышенными привилегиями, например, когда вы щелкаете правой кнопкой мыши приложение и выбираете запуск от имени администратора, а пароль не запрашивается, только диалоговое окно подтверждения, вам нужно что-то еще. Я пришел сюда в поисках ответа, но, похоже, его здесь нет.
— Пол-Себастьян Маноле
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.