如何使用Windows命令行打开提升的cmd?


109

如何在普通cmd上使用命令行打开提升权限的命令提示符?

例如,我使用runas /username:admin cmd但打开的cmd似乎没有升高!有什么办法吗?


我尝试了所有答案。最有用的答案是没有任何软件,而且至少没有采取任何行动,是stackoverflow.com/a/40942828/9217577
TheGuardener

Answers:


165

我遇到了同样的问题,我能够以CMD管理员身份打开CMD的唯一​​方法是执行以下操作:

  1. 开放式CMD
  2. 撰写powershell -Command "Start-Process cmd -Verb RunAs"并按Enter
  3. 将出现一个弹出窗口,要求以管理员身份打开CMD。

2
好答案。我添加并编辑了以前使它在一个命令行中运行的内容!
Preet Sangha

1
我为此创建了一个批处理文件,并将其另存为Windows文件夹中的admincmd.bat,因此,我要做的就是键入“ admincmd”并按回车,然后打开一个admin cmd。(我还向批处理文件中添加了另一行“退出”,因此它会关闭非管理员cmd窗口)
Tony Brix

为什么不将cmd(和任何参数)放在最后。从可读性的角度来看,拥有命令是很奇怪的。
埃里克·弗索姆

38

根据文档,Windows安全模型...

不会始终授予管理特权。当管理员执行不需要提升特权的非管理任务时,甚至管理员也可以在标准特权下运行

您可以在“ 创建新任务”对话框(“ 任务管理器”>“文件”>“运行新任务”)中使用“使用管理特权创建此任务”选项)中,但是没有内置的方法可以使用命令行有效地提升特权。

但是,有一些第三方工具(内部依赖于Windows API)可用于从命令行提升特权:

NirCmd

  1. 下载并解压缩。
  2. nircmdc elevate cmd

温多苏

  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:...尽管已经是管理员,但其他方式仍提示您输入密码(已终止批处理模式)。
Marcos 2014年

感谢您nircmdc elevate cmd
蒂姆

4
安装后nircmd,要使其像Linux一样工作sudo,请sudo.bat在路径中创建一个包含以下内容的文件: nircmd elevate %*。然后,您可以执行例如sudo net stop W3SVC
Kip

1
我认为windosu是到目前为止最简单,最优雅的方法,尤其是如果您是开发人员……谢谢。我觉得我正在使用nix系统:D
Emmanuel Mahuni

爱过的windosu:)
Finlay Roelofs

32

我的信誉不足,无法在最佳答案中添加评论,但是凭借别名的强大功能,您只需输入以下内容即可摆脱困境:

powershell "start cmd -v runAs"

这只是user3018703优秀解决方案的简短版本:

powershell -Command "Start-Process cmd -Verb RunAs"

26

我在这里尝试其他答案后所做的简单方法

方法1:没有第3方程序(我使用了此方法)

  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显示在顶部(z顺序明智),但对话框不会得到关注。(在Win10x64 v1607 build14393.447上进行了测试。)
Ogmios,2016年

@Ogmios,这很奇怪。未像这样启动对话框时,对话框能否正常工作?我一直很愉快地使用此功能,而没有出现此类问题。也许是因为您更改了某些其他配置?
Dheeraj Bhaskar

是的,UAC对话框在所有其他情况下都能正常工作(我已经遇到)。这是唯一的例外。当然,我已经以其他方式更改了系统,但是我没有发现任何可能对该对话框产生隐藏影响的内容。
Ogmios '16

@Ogmios对不起,队友,我想不出其他办法可以解决此问题。您可能应该尝试其他解决方案,以查看它们是否对您更好。欢呼声
Dheeraj Bhaskar

虽然powershell不是第三方,但它不是股票程序,您正在编写第三方程序来实现目标。
Undrline '19

13

我一直使用nirsoft程序(例如nircmdc)和sysinternals(例如psexec)。他们非常有帮助。

但是,如果您不想或不能dl第三方程序,这是另一种方法,即纯Windows。

简短的回答:您可以在提升权限的同时创建具有提升权限的计划任务,然后在不提升权限的情况下稍后调用。

中等长度的答案:提升创建任务的同时(但我更喜欢任务计划程序GUI):

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

我最喜欢的方法是使用SysInternals的PsExec.exe,网址为http://technet.microsoft.com/zh-cn/sysinternals/bb897553

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

“ -h”开关是执行魔术操作的开关:

-h如果目标系统是Vista或更高版本,则使用该帐户的提升的令牌运行该进程(如果有)。


1
要使其正常工作,必须编辑psexec.exe的属性,然后在“兼容性”选项卡上选中“以管理员身份运行”。否则,您将得到错误:未安装PSEXESVC。但是psexec导致cmd.exe中的Tab键出现问题。无法使用制表符填写文件夹名称。
彼得·奎林

不知道您在哪个环境上尝试过,但是我不需要更改“以管理员身份运行”设置(您是否正在尝试从您的远程计算机上运行cmd.exe?)。使用Tab键也没有问题,我可以成功完成文件和文件夹的名称(至少已在Win8.1和Win10上进行了测试,并从cmd和PowerShell命令行运行)
David Rodriguez

我正在使用Win10并在本地运行它。不知道为什么会发生在我身上,而不是你。我确实让nircmd工作,并且不会导致制表符问题。
彼得·奎林

我还注意到,无法使用Tab键自动完成操作,但是至少这会在另一个用户的上下文中打开提升的cmd提示,当我尝试使用上述以前的方法时,似乎无法实现。'-h'标志很棒(Windows 10),很不错。
user1840734

4

通过使用/savecred开关,使批处理文件保存实际管理员帐户的凭据。这将在第一次提示输入凭据时,然后将加密的密码存储在凭据管理器中。然后,对于批处理运行的所有后续时间,它将以完全管理员身份运行,但不会提示输入凭据,因为它们以加密方式存储在凭据管理器中,并且最终用户无法获取密码。以下内容应使用完全的管理员权限打开提升的CMD,并且仅在第一次时提示输入密码:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe

3

虽然通过Dheeraj巴斯卡尔工作提供了两种解决方案,遗憾的是他们将导致UAC显示在顶部(z顺序明智)对话框,但没有得到关注(焦点窗口是调用者CMD / PowerShell窗口),所以我要么需要抓住鼠标并单击“是”,或使用Alt + Shift + Tab选择UAC窗口。(在Win10x64 v1607 build14393.447上进行了测试; UAC = “ [...]不会变暗[...]”。)

以下解决方案有点尴尬,因为它使用了两个文件,但是保留了正确的焦点顺序,因此不需要额外的鼠标/键盘操作(除了确认UAC对话框:Alt + Y)。

  1. cmdadm.lnk(快捷方式属性/高级... /以管理员身份运行= ON) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

用运行su


不幸的是,我无法重现。每当我使用任何一种解决方案时。我的UAC提示的重点和顶部
Dheeraj巴斯卡尔

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对话框,并通过键盘控制适当地聚焦,并在接受对话框后返回我的shell。


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

将此脚本另存为system32或任何路径所指向的“ god.cmd”。

如果您在e:\ mypictures \中打开一个cmd并键入God,它将要求您提供凭据并将您带回到与管理员相同的位置...


1
powershell很酷,但是它需要zzzz模块... im oldscool ...只需要系统...
10

这种高程方法/技巧也适用于长路径/文件名吗?还是我应该使用“%〜snx0”或“%〜dpsnx0”?
script'n'code

2

与上述其他一些解决方案类似,我创建了一个 elevate批处理文件,该文件运行一个提升的PowerShell窗口,绕过执行策略以启用从简单命令到批处理文件到复杂PowerShell脚本的所有运行。我建议将其粘贴在C:\ Windows \ System32文件夹中,以方便使用。

原始elevate命令执行其任务,捕获输出,关闭生成的PowerShell窗口,然后返回,将捕获的输出写出到原始窗口。

我创建了两个变体,elevatep并且elevatex它们分别暂停并保持PowerShell窗口打开以进行更多工作。

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

如果我的链接消失了,这是原始的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"

)(targetedCmd在提升的cmd窗口中执行)

尽管它是3个文件,但是您可以将所有内容(包括targetedCmd)放在某个子文件夹中(不要忘记将folderName添加到补丁程序中),并将“ start.cmd”重命名为target的一个名称。

对我来说,这似乎是最本机的方式,而cmd没有所需的命令


我已经阅读了以上所有解决方案并理解了它们。我不明白你的步骤。我正在选择具有最佳利弊的解决方案。
Dzmitry Lahoda '18 -10-14

0

我不确定工具ExecElevated.exe(13KB)是否能完成工作....但是可以。或至少对像我一样访问此页面的其他人有用(但我没有找到解决方案,所以最终我自己在.Net中创建了该工具)。

它将执行具有提升令牌的应用程序(在管理模式下)。但是您将获得一个UAC对话框进行确认!(如果未禁用UAC,可能尚未测试)。

并且调用该工具的帐户还必须具有管理员。权利。

使用示例:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"

2
我只是喜欢用“这可能还没有测试”的答案,当然还有那些“不确定”的答案。–
Giridhar Karnik 2015年

1
链接断开。
Dzmitry Lahoda '18 -10-14

链接已重新建立,对此表示抱歉
MrCalvin

0

Dheeraj Bhaskar使用Powershell的方法中缺少空间,至少对于Windows 10的Powershell化身而言。

他的sudo.bat中的命令行应该是

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

请注意%cd%之后的多余空间

;)


0

这是与资源管理器集成的方法。在Windows资源管理器中的任何文件夹上单击鼠标右键时,它将弹出一个额外的菜单项:

Windows资源管理器集成

步骤如下:

  1. 创建此密钥:\ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. 将其默认值更改为想要显示为菜单项文本的任何值。例如“ DOS Shell作为管理员”
  3. 创建另一个密钥:\ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. 将其默认值更改为ipsis litteris:powershell.exe-命令“开始进程-Verb RunAs'cmd.exe'-Args'/ k已推送”%1””
  5. 完成。现在,右键单击任何文件夹,您将在其他项目中看到您的项目。

*使用push而不是cd使其可以在任何驱动器中工作。:-)


-1

您可以使用以下语法,我有相同的问题,并且认为不需要脚本。

Runas / profile /用户:域\用户名cmd

这对我有用,在您的网络上可能有所不同。


-1

只需使用命令:runas / noprofile / user:administrator cmd



-2

按Windows + X键,您现在可以选择具有管理员权限的Powershell或命令提示符。如果您是管理员,则可以使用。如果系统不是您的,则该功能可能无法使用。


-5

有几种打开提升的cmd的方法,但是只有您的方法可以在标准命令提示符下使用。你只需要把userusername

runas /user:machinename\adminuser cmd

请参阅Microsoft社区的相关帮助。


4
这与运行提升的命令不同,因为当我打开提升的cmd窗口并键入“ whoami”时,它会带来与非提升的窗口相同的结果。在两种情况下都运行“ whoami / all”时,我可以看到同一用户的权限方面的差异。
君士坦丁堡Cronemberger 2015年

-5

我用runas /user:domainuser@domain cmd哪个成功打开了提升的提示。


它需要其他用户的凭据。如果您已经是管理员,并且希望以提升的特权运行,例如右键单击某个应用程序并选择以管理员身份运行,并且不需要输入密码,只需输入确认对话框即可,那么您还需要其他内容。我是来这里寻找答案的,但似乎不在这里。
Paul-Sebastian Manole 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.