132

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

比如我用runas /username:admin cmd了但是打开的cmd好像没有提升!有什么解决办法吗?

4

29 回答 29

196

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

  1. 打开 CMD
  2. 书写powershell -Command "Start-Process cmd -Verb RunAs"并按下Enter
  3. 将出现一个弹出窗口,要求以管理员身份打开 CMD
于 2015-08-26T01:05:38.977 回答
45

我没有足够的声誉来为最佳答案添加评论,但是借助别名的力量,您只需键入以下内容即可逃脱:

powershell "start cmd -v runAs"

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

powershell -Command "Start-Process cmd -Verb RunAs"
于 2018-11-10T09:29:03.673 回答
40

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

方法 1:没有 3rd 方程序(我用过这个)

  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:使用第 3 方程序

  1. 下载NirCmd并解压缩。
  2. 使用以下内容创建一个名为sudo.bat(您可以sudo用任何您想要的名称替换)的文件 nircmdc elevate cmd /k "cd /d %cd%"
  3. 移动nircmdc.exesudo.bat到您的文件夹PATH;如果您不知道这意味着什么,只需将这些文件移动到c:\windows\
  4. 现在sudo可以在“运行”对话框 ( win+r) 或资源管理器地址栏中工作(这是最好的部分 :))
于 2016-10-29T16:40:49.380 回答
39

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

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

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

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

NirCmd

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

温多苏

  1. 安装它:(npm install -g windosu需要安装node.js
  2. sudo cmd
于 2014-03-21T15:28:17.990 回答
16

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

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

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

中等长度的答案:虽然提升了创建任务(但我更喜欢任务调度程序 GUI):

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

然后,不需要提升,调用 with

schtasks /run /tn cmd_elev

长答案:有很多烦人的细节;请参阅我的博客条目“在没有 UAC 的情况下启动程序,在系统启动和批处理文件中有用(使用任务调度程序)”

于 2015-02-19T07:59:27.543 回答
10

以下作为批处理文件将打开提升的命令提示符,其路径设置为与调用批处理文件的目录相同的目录

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
于 2017-04-14T00:25:31.467 回答
6

我最喜欢的方法是使用来自 SysInternals 的 PsExec.exe,可从http://technet.microsoft.com/en-us/sysinternals/bb897553获得

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

“-h”开关是一个神奇的开关:

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

于 2014-09-07T14:11:47.290 回答
6

虽然 Dheeraj Bhaskar 提供的两种解决方案都有效,但不幸的是,它们会导致UAC对话框显示在顶部(z-order-wise)但没有获得焦点(焦点窗口是调用者 cmd/powershell 窗口),因此我要么需要抓住鼠标并单击“是”,或使用 Alt+Shift+Tab 选择 UAC 窗口。(在 Win10x64 v1607 build14393.447 上测试;UAC = "[...] do not dim [...]"。)

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

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

运行su

于 2016-12-03T00:18:06.640 回答
6

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

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
于 2018-05-17T18:32:53.403 回答
4

我已经使用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\elevatePATH

然后 GitBash 我可以运行类似elevate sc stop W3SVC关闭IIS服务的东西。

运行命令会给我一个UAC对话框,通过键盘控制正确聚焦,并在接受对话框后返回我的 shell。

于 2017-06-11T16:33:33.973 回答
3

在这方面似乎有很多非常有创意的解决方案,但我发现Stiegler & Gui对我来说最有意义。我正在研究如何做到这一点,但将它与我的域管理员凭据结合使用,而不是依赖“当前用户”的本地权限。

这就是我想出的:

runas /noprofile /user:DomainName\UserName "powershell start cmd -v runas"

这似乎是多余的,但它确实提示我输入管理员密码,并且确实作为提升的命令提示符出现。

于 2021-10-07T14:18:18.623 回答
3

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

Windows 资源管理器集成

以下是步骤:

  1. 创建此密钥:\HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin
  2. 将其默认值更改为您希望显示为菜单项文本的任何值。
    例如“ DOS Shell 作为管理员
  3. 创建另一个密钥:\HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin\command
  4. 并将其默认值更改为:
    powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/k pushd "%1"'"
  5. 完毕。现在右键单击任何文件夹,您将在其他项目中看到您的项目。

*我们使用pushd而不是cd允许它在任何驱动器中工作。:-)

于 2020-07-18T21:11:17.227 回答
3

Dheeraj Bhaskar 使用 Powershell 的方法中缺少空格,至少对于 Powershell 的 Windows 10 化身来说是这样。

他的 sudo.bat 里面的命令行应该是

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

注意 %cd% 后的多余空格

;) 弗罗德

于 2019-05-14T09:19:22.403 回答
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,它会要求你提供凭据并将你带回与管理员相同的位置...

于 2018-02-09T00:40:56.580 回答
2

对于 Cygwin 的粉丝:

cygstart -a runas cmd
于 2020-11-15T12:22:43.330 回答
2

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

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

我创建了两个变体elevatepelevatex,它们分别暂停和保持 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
)
于 2017-03-07T14:38:24.257 回答
2

当 CMD 脚本需要管理员权限并且您知道时,将此行添加到脚本的最顶部(右下方@ECHO OFF):

NET FILE > NUL 2>&1 || POWERSHELL -ex Unrestricted -Command "Start-Process -Verb RunAs -FilePath '%ComSpec%' -ArgumentList '/c \"%~fnx0\" %*'" && EXIT /b

NET FILE检查现有管理员权限。如果没有,PowerShell 将在提升的shell 中重新启动当前脚本(及其参数),并关闭非提升的脚本。

允许运行脚本-ex Unrestricted是必要的。 -Command执行以下字符串。 以管理员Start-Process -Verb RunAs身份运行进程:shell(通常)启动()当前脚本()传递其参数()。%ComSpec%C:\Windows\System32\cmd.exe/c\"%~fnx0\"%*

也许不是这个问题的确切答案,但这很可能是人们最终需要的。

于 2021-09-21T10:15:55.530 回答
1

回答有点晚了,但对于像我这样的迟到者来说还是回答了。我有两种方法。第一个是基于对@Dheeraj Bhaskar 答案的微小改动,第二个是新的(这里的任何答案都没有提到)。

方法1:为windows创建一个admin命令(只是为了灵活性)。

@ECHO OFF
powershell -Command "Start-Process %1 -Verb RunAs"

打开记事本 -> 复制/粘贴上面的脚本 -> 将其保存为 c:\windows 中的 admin.bat

可以在上面的脚本中添加很多内容以使其更好,但我尽量保持简单,而且因为我不是批处理脚本方面的专家。

现在您可以使用admin作为命令来运行具有提升权限的任何其他命令或应用程序。

admin cmd在标准 cmd 中回答原始问题。

方法 2:使用runas命令。为此,我们需要启用内置管理员帐户(如果尚未启用)并设置密码。大多数系统默认禁用此帐户。

在制造 PC 时,您可以在创建用户帐户之前使用内置的管理员帐户来运行程序和应用程序。资源

启用管理员帐户的步骤-

  1. 点击 Windows+R 并键入compmgmt.msc将打开计算机管理窗口。
  2. 转到系统工具 -> 本地用户和组 -> 用户
  3. 您应该在此处看到一个名为 Administrator 的帐户(有关此帐户的更多信息可以在此处找到)。
  4. 右键单击管理员并选择属性。
  5. 检查密码永不过期。取消选中帐户已禁用和其他所有内容,然后单击确定。这将在您的系统上启用管理员帐户。如果已启用则跳过。
  6. 再次右键单击管理员并单击设置密码(默认情况下,它没有设置密码,但为了使runas命令正常工作,我们需要设置密码)。现在,windows 将向您显示一个您可以接受的危及生命的警告。或者,如果您想安全起见,那么您应该在启用此帐户后登录并从那里设置密码。

现在runas命令应该可以工作了——启动一个标准的 cmd 并输入——

runas /user:administrator cmd

EXTRA:现在我们可以创建类似于 Linuxsudo命令的东西。使用以下脚本创建一个sudo.bat文件并将其保存在 c:\windows 中。

@ECHO OFF
powershell -Command "runas /user:administrator %1"

现在我们可以做sudo cmd

于 2021-12-01T16:32:40.353 回答
0

我为我的 smartctl 做了这个,它变成了一个便携式应用程序。我从这里借来的。

@echo off

set location=%cd%\bin
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList { '/k "TITLE Smartctl" & color 07 & pushd "%location%" & prompt $g & echo "Welcome to Smartctl cmd"' }"

prompt $g隐藏了漫长的引导路径。
pushd "%location%"类似于cd /d "%location%"

  1. 另存为smartctl.cmd
  2. smartctl.cmd
  3. 将快捷方式复制到C:\Users\#YourName#\AppData\Roaming\Microsoft\Windows\StartMenu\Programs
  4. 点击开始菜单旁边的搜索并输入smartctl
  5. 右键点击Pin to Start
于 2021-12-03T06:28:30.070 回答
0

The quickest way by far is to:

  1. CTRL+ALT+DELETE
  2. Run TASK MANAGER
  3. Click FILE > Run New Task > type in "cmd" and tick the "Create this task with administrative privileges." box.

Not sure if this helps but this is how I managed to do it. Doesn't help if you need a command to run from batch but hey-ho ... I needed this just because windows explorer is corrupted and needed to fix it.

This is my workaround. Hope this helps someone if not the original poster.

于 2021-08-16T10:30:12.933 回答
0

利用:

start, run, cmd, 那么control+shift+enter

您将获得 UAC,然后是提升的命令 shell。

于 2021-03-28T02:36:39.247 回答
-1

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

runas /profile /user:domain\username cmd

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

于 2019-11-29T15:28:39.740 回答
-1

可以使用临时环境变量与提升的快捷方式(

开始.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 个文件,但您可以将所有内容(包括 targetCmd)放在某个子文件夹中(不要忘记将 folderName 添加到补丁中)并将“start.cmd”重命名为 target 的一个名称

对我来说,这看起来像是最原生的方式,而 cmd 没有所需的命令

于 2018-07-25T23:28:56.877 回答
-1

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

于 2020-01-08T09:32:02.793 回答
-2

我通过在cmd中使用以下命令轻松做到了

runas /netonly /user:Administrator\Administrator cmd

输入此命令后,您必须输入您的管理员密码(如果您不知道您的管理员密码,请将其留空,然后按Enter或输入内容,对我有用)..

于 2018-08-16T07:18:18.163 回答
-2

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

于 2019-02-25T14:11:19.730 回答
-3

我在 .Net 4.8 ExecElevated.exe,13KBVS 2022 源项目)中创建了这个工具,它将执行一个带有提升令牌的应用程序(在管理员模式下)。但是你会得到一个 UAC 对话框来确认!(如果 UAC 已被禁用,可能不会,还没有测试过)。

调用该工具的帐户也必须具有管理员权限。当然权利。

使用示例:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
于 2014-11-14T23:55:00.417 回答
-5

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

于 2014-03-10T23:02:38.160 回答
-6

有几种方法可以打开提升的 cmd,但只有您的方法适用于标准命令提示符。您只需要输入usernot username

runas /user:machinename\adminuser cmd

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

于 2013-09-30T16:05:53.467 回答