如何使用Windows命令行打开提升的cmd?
如何使用普通cmd上的命令行打开提升的命令提示符?
例如,我使用runas /username:admin cmd
但是打开的cmd似乎没有被提升! 任何解决scheme
我遇到了同样的问题,唯一能以CMDpipe理员身份打开CMD的方法是:
- 打开CMD
- 编写
powershell -Command "Start-Process cmd -Verb RunAs"
,然后按Enter键 - 将出现一个popup窗口,要求以pipe理员身份打开CMD
根据文档 ,Windows安全模型…
在任何时候都不授予pipe理权限。 即使pipe理员在执行不需要提升权限的非pipe理性任务时也能以标准权限运行 。
在“ 创build新任务”对话框(“ 任务pipe理器”>“文件”>“运行新任务” )中,您可以使用pipe理权限创build此任务选项,但是没有内置的方法可以使用命令行有效地提升权限。
但是,有一些第三方工具(内部依赖于Windows API)可以用来从命令行提升权限:
NirCmd :
- 下载并解压缩。
-
nircmdc elevate cmd
windosu :
- 安装:
npm install -g windosu
(需要安装node.js ) -
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:没有第三方程序(我用这个)
- 使用以下内容创build一个名为
sudo.bat
的文件(可以使用任何名称replacesudo
)powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
- 将
sudo.bat
移到PATH
的文件夹中; 如果你不知道这意味着什么,只要把这些文件移到c:\windows\
- 现在
sudo
将运行在运行对话框( win + r )或在资源pipe理器地址栏(这是最好的部分:))
方法2:与第三方程序
- 下载NirCmd并解压缩。
- 使用以下内容创build一个名为
sudo.bat
的文件(可以用任何名称replacesudo
)nircmdc elevate cmd /k "cd /d %cd%"
- 将
nircmdc.exe
和sudo.bat
移动到PATH
的文件夹中; 如果你不知道这意味着什么,只要把这些文件移到c:\windows\
- 现在
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 )。
- cmdadm.lnk(快捷方式属性/ Advanced … /以pipe理员身份运行= ON)
%SystemRoot%\System32\cmd.exe /k "cd /d"
- 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 W3SVC
closuresIIS
服务的东西。
运行这个命令给了我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了两个变体, elevatep
和elevatex
,分别暂停和保持打开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
,它成功地打开了一个提升的提示符。