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

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

例如,我使用runas /username:admin cmd但是打开的cmd似乎没有被提升! 任何解决scheme

我遇到了同样的问题,唯一能以CMDpipe理员身份打开CMD的方法是:

  1. 打开CMD
  2. 编写powershell -Command "Start-Process cmd -Verb RunAs" ,然后按Enter键
  3. 将出现一个popup窗口,要求以pipe理员身份打开CMD

根据文档 ,Windows安全模型…

在任何时候都不授予pipe理权限。 即使pipe理员在执行不需要提升权限的非pipe理性任务时也能以标准权限运行

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

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

NirCmd :

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

windosu :

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

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

但是,如果你不想,或不能,第三方程序,这是另一种方式,纯粹的Windows。

简短的回答 :你可以在提升的时候使用提升的权限创build一个计划的任务,然后你可以调用,而不是提升。

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

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

然后,没有需要的高程,调用

 schtasks /run /tn cmd_elev 

很长的答案 :有很多烦琐的细节; 看到我的博客条目“启动程序没有UAC,在系统启动和batch file(使用任务调度程序)有用”

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

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

  1. 使用以下内容创build一个名为sudo.bat的文件(可以使用任何名称replacesudopowershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. sudo.bat移到PATH的文件夹中; 如果你不知道这意味着什么,只要把这些文件移到c:\windows\
  3. 现在sudo将运行在运行对话框( win + r )或在资源pipe理器地址栏(这是最好的部分:))

方法2:与第三方程序

  1. 下载NirCmd并解压缩。
  2. 使用以下内容创build一个名为sudo.bat的文件(可以用任何名称replacesudonircmdc elevate cmd /k "cd /d %cd%"
  3. nircmdc.exesudo.bat移动到PATH的文件夹中; 如果你不知道这意味着什么,只要把这些文件移到c:\windows\
  4. 现在sudo将运行在运行对话框( win + r )或在资源pipe理器地址栏(这是最好的部分:))

我最喜欢的方式是使用SysInternals提供的PsExec.exe,位于http://technet.microsoft.com/en-us/sysinternals/bb897553

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

“-h”开关是做魔术的人:

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

尽pipeDheeraj Bhaskar提供的两个解决scheme都可以工作,但不幸的是,他们将导致UAC对话框显示在顶部(z顺序),但没有得到集中 (聚焦的窗口是调用者cmd / powershell窗口),因此我需要抓住鼠标并单击“是”,或使用Alt + Shift + TabselectUAC窗口。 (testingWin10x64 v1607 build14393.447; UAC = “[…]不要调暗”)

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

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

su运行。

我现在一直在使用Elevate

这是描述 – This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files. 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 bin.x86-64\elevate.exe ,然后将该path添加到我的PATH

然后GitBash我可以运行像elevate sc stop W3SVCclosuresIIS服务的东西。

运行这个命令给了我UAC对话框,正确地集中在键盘控制和接受我返回到我的shell的对话框。

我不知道工具ExecElevated.exe (13KB)将完成这项工作….但它可能。 或者至less对于像我一样来到这个页面的其他人有用(但是我没有find解决scheme,所以我最终在.Net中创build了这个工具)。

它将执行具有提升令牌的应用程序(以pipe理员模式)。 但是你会得到一个UAC对话框来确认! (也许不是如果UAC被禁用,还没有testing过)。

而调用该工具的帐户也必须有pipe理员。 原因权利。

使用示例:

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

类似于上面的其他一些解决scheme,我创build了一个升级的batch file,它运行一个提升的PowerShell窗口,绕过执行策略来启用从简单命令到batch file到复杂的PowerShell脚本的所有操作。 为了便于使用,我build议将其粘贴到C:\ Windows \ System32文件夹中。

最初的elevate命令执行任务,捕获输出,closures衍生的PowerShell窗口,然后返回,将捕获的输出写出到原始窗口。

我创build了两个变体, elevatepelevatex ,分别暂停和保持打开PowerShell窗口的更多工作。

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

如果我的链接死了,这里是原始的升级batch file的代码:

 @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 ) 

以下作为batch file将打开一个提升的命令提示符,将path设置为与调用batch file的path相同的目录

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

有几种方法可以打开提升cmd,但只有您的方法可以从标准命令提示符下运行。 你只需要把user username

 runas /user:machinename\adminuser cmd 

查看来自Microsoft社区的相关帮助。

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