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

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

例如,我使用 runas /username:admin cmd,但打开的 cmd 似乎没有提高! 有什么解决方案吗?

471881 次浏览

有几种方法可以打开升级的 cmd,但只有您的方法可以在标准命令提示符下工作。你只需要把 user而不是 username:

runas /user:machinename\adminuser cmd

请参阅 微软社区的相关帮助。

我使用了 runas /user:domainuser@domain cmd,它成功地打开了一个提示符。

根据 文件,Windows 的安全模型..。

完全不授予管理特权 当他们 执行不需要提升的非行政任务 特权。

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

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

NirCmd :

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

温都苏:

  1. 安装: npm install -g windosu(需要安装 Node Js)
  2. sudo cmd

我最喜欢的方法是使用 SysInternals 中的 PsExec.exe,可以在 http://technet.microsoft.com/en-us/sysinternals/bb897553中找到

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

这个“-h”开关就是那个施展魔法的开关:

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

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

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

使用示例:

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

我一直使用 nirsoft 程序(例如 nircmdc)和 sysInternal (例如 psexec) ,它们非常有用。

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

简短的回答 : 您可以在提升的时候创建一个具有提升的特权的计划任务,然后在不提升的时候调用这个任务。

中长答案 : 使用(但我更喜欢任务调度程序 GUI)来提升 create task:

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

然后,在不需要升级的情况下,使用

schtasks /run /tn cmd_elev

详细的回答 : 有很多烦躁的细节; 参见我的博客条目 < a href = “ http://montgomeryMinds.com/blog/Start-program-WITHOUT-UAC-used-at-system-Start/”rel = “ noreference rer”> “ Start program WITHOUT UAC,use at system Start and in batch files (use task Scheder)”“启动程序,不带 UAC,在系统启动和批处理文件中都很有用(使用任务调度器)”

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

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

在尝试了其他答案之后,我做了一个简单的方法

方法1: 没有第三方程序(我使用了这个)

  1. 创建一个名为 sudo.bat的文件(可以用任意名称替换 sudo) ,内容如下 Exe-命令“ 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) ,内容如下 提高 cmd/k“ cd/d% cd%”
  3. nircmdc.exesudo.bat移动到 PATH中的一个文件夹中; 如果您不知道这意味着什么,只需将这些文件移动到 c:\windows\
  4. 现在,sudo将在运行对话框(win+r)或浏览器地址栏(这是最好的部分:)中工作

虽然 Dheeraj Bhaskar 提供的两个解决方案都可行,但不幸的是,它们会导致 UAC对话框出现在顶部(z 顺序) ,而 没有得到 集中注意力(焦点窗口是调用者 cmd/powershell 窗口) ,因此我要么抓住鼠标点击“ yes”,要么使用 Alt + Shift + Tab 选择 UAC 窗口。(在 Win10x64 v1607 build 14393.447上测试; UAC = “不要暗淡...”。)

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

  1. Lnk (快捷属性/Advanced.../以管理员身份运行 = ON) % SystemRoot% System32cmd.exe/k“ cd/d”
  2. 蝙蝠 @ start cmdadm.lnk% cd%

运行 su

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

原来的 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
)

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

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "

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

然后我可以运行类似于 elevate sc stop W3SVC的程序来关闭 IIS服务。

运行该命令会出现 UAC对话框,通过键盘控制正确聚焦,在接受该对话框后,我将返回到 shell。

..

@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或者任何你的路径指向的地方。

如果你在 e 中打开一个 cmd: mypicture 并键入 God 它会要求您提供证书,然后把您放回管理员所在的位置。

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

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

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

启动 cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.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)放在某个子文件夹中(不要忘记将 folderName 添加到补丁中) ,并将“ start.cmd”重命名为 target 的一个名称

对于我来说,它看起来像是最本地的方法,而 cmd 没有所需的命令

我在 Cmd中使用以下命令轻松地完成了这项工作

Runas/netonly/user: Administrator Administrator cmd

在输入这个命令之后,您必须输入您的管理员密码(如果您不知道您的管理员密码,请将其保留为空白,然后按 进来或者键入一些东西,这对我很有用)。.

我没有足够的名声在最上面的答案里添加评论,但是有了别名的力量,你只需要输入以下内容就可以了:

powershell "start cmd -v runAs"

这只是 user3018703的一个简短版本 解决方案:

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

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

迪拉吉•巴斯卡(Dheeraj Bhaskar)使用 Powershell 的方法缺少一个空间,至少对于 Windows 10的 Powershell 版本来说是这样。

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

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

请注意% cd% 后面的额外空间

;)弗洛德

你可以使用下面的语法,我有同样的问题,并不认为一个脚本应该是必要的。

Runas/profile/user: domain username cmd

这招对我管用,但在你们的网络上可能不一样。

只要使用命令: Runas/noprofile/user: 管理员 cmd

这里有一个方法与探索者集成。 当你右键点击文件资源管理器中的任何文件夹时,它会弹出一个额外的菜单项:

Windows Explorer Integration

以下是步骤:

  1. 创建这个密钥: \HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin
  2. 将其默认值更改为您希望显示为菜单项文本的任何值。
    例如“ 作为管理员
  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来允许它在任何驱动器中工作。 : -)

对于 Cygwin 的粉丝:

cygstart -a runas cmd

用途:

startruncmd,然后 control+shift+enter

你会得到 UAC 和一个升级的命令外壳。

到目前为止最快的方法是:

  1. CTRL+ALT+DELETE
  2. 运行任务管理器
  3. 单击 FILE > Run New Task > type in "cmd"并勾选“使用管理权限创建此任务”框。

不知道这是否有帮助,但这是我如何设法做到这一点。如果你需要一个命令来运行批处理程序,那么这个命令是没有用的,但是嘿嘿... 我需要这个命令只是因为文件资源管理器已经损坏了,需要修复它。

这是我的变通方法。希望这能帮助别人,如果不是原来的海报。

如果一个 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 执行以下字符串。 运行一个进程 作为管理者: Shell (%ComSpec%,通常是 C:\Windows\System32\cmd.exe)启动(/c)当前脚本(\"%~fnx0\")传递其参数(%*)。

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

在这方面似乎有很多真正有创意的解决方案,但我发现 斯蒂格勒阿贵对我来说最有意义。我正在研究如何做到这一点,但使用它与我的域管理员凭证,而不是依赖于“当前用户”的本地权限。

这是我想到的:

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

它可能看起来多余,但它确实提示输入我的管理员密码,并且确实作为提升的命令提示符出现。

现在回答有点晚了,不过对于像我这样迟到的人来说还是要回答的。 我有两个办法。第一个是基于对@Dheeraj Bhaskar 的回答的微小改动,第二个是新的(这里的任何回答都没有提到)。

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

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

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

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

现在,您可以使用 管理员作为命令,用 特权运行任何其他命令或应用程序。

在标准 cmd 中回答原来的问题-类型 admin cmd

方法2 : 使用 < strong > runas 命令。为此,我们需要启用 内置管理员帐户(如果还没有启用)并设置密码。在大多数系统上,默认情况下禁用此帐户。

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

启用管理员帐户的步骤-

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

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

runas /user:administrator cmd

EXTRA : 现在我们可以创建一些类似于 Linux 的 sudo命令的东西。使用以下脚本创建一个 Sudo 蝙蝠文件,并将其保存在 c: windows 中。

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

现在我们可以做 sudo cmd

我这样做是为了我的智能手机,它变成了一个便携式应用程序。 我从这里借用了它。

@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

安装 Gsudo工具并使用 gsudo命令。出现 UAC 弹出窗口,最终当前控制台窗口中的命令提示符将被提升:

C:\Users\Someone>net session
System error 5 has occurred.


Access is denied.


C:\Users\Someone>gsudo
C:\Users\Someone# net session
There are no entries in the list.

该工具可以使用 各种包装管理器(Scoop,WinGet,Chocolatey)安装。