如何在普通 cmd 上使用命令行打开提升的命令提示符?
比如我用runas /username:admin cmd
了但是打开的cmd好像没有提升!有什么解决办法吗?
我遇到了同样的问题,我能够以管理员身份从 CMD 打开 CMD 的唯一方法是执行以下操作:
powershell -Command "Start-Process cmd -Verb RunAs"
并按下Enter我没有足够的声誉来为最佳答案添加评论,但是借助别名的力量,您只需键入以下内容即可逃脱:
powershell "start cmd -v runAs"
这只是 user3018703 优秀解决方案的较短版本:
powershell -Command "Start-Process cmd -Verb RunAs"
sudo.bat
(您可以sudo
用任何您想要的名称替换)的文件
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
sudo.bat
到您的文件夹PATH
;如果您不知道这意味着什么,只需将这些文件移动到c:\windows\
sudo
可以在“运行”对话框 ( win+r) 或资源管理器地址栏中工作(这是最好的部分 :))sudo.bat
(您可以sudo
用任何您想要的名称替换)的文件
nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
和sudo.bat
到您的文件夹PATH
;如果您不知道这意味着什么,只需将这些文件移动到c:\windows\
sudo
可以在“运行”对话框 ( win+r) 或资源管理器地址栏中工作(这是最好的部分 :))根据文档,Windows 安全模型...
不会始终授予管理权限。甚至管理员在执行不需要提升权限的非管理任务时也在标准权限下运行。
您在“创建新任务”对话框(“任务管理器”>“文件”>“运行新任务” )中有“使用管理权限创建此任务”选项,但没有使用命令行有效提升权限的内置方法。
但是,您可以使用一些第三方工具(内部依赖于 Windows API)从命令行提升权限:
nircmdc elevate cmd
npm install -g windosu
需要安装node.js)sudo cmd
我一直使用 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 的情况下启动程序,在系统启动和批处理文件中有用(使用任务调度程序)”
以下作为批处理文件将打开提升的命令提示符,其路径设置为与调用批处理文件的目录相同的目录
set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
我最喜欢的方法是使用来自 SysInternals 的 PsExec.exe,可从http://technet.microsoft.com/en-us/sysinternals/bb897553获得
.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe
“-h”开关是一个神奇的开关:
-h 如果目标系统是 Vista 或更高版本,则使用帐户的提升令牌运行进程(如果可用)。
虽然 Dheeraj Bhaskar 提供的两种解决方案都有效,但不幸的是,它们会导致UAC对话框显示在顶部(z-order-wise)但没有获得焦点(焦点窗口是调用者 cmd/powershell 窗口),因此我要么需要抓住鼠标并单击“是”,或使用 Alt+Shift+Tab 选择 UAC 窗口。(在 Win10x64 v1607 build14393.447 上测试;UAC = "[...] do not dim [...]"。)
以下解决方案有点尴尬,因为它使用两个文件,但它保留了正确的焦点顺序,因此不需要额外的鼠标/键盘操作(除了确认 UAC 对话框:Alt+Y)。
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
运行su
。
/savecred
使用开关使批处理文件保存实际管理员帐户的凭据。这将第一次提示输入凭据,然后将加密的密码存储在凭据管理器中。然后在后续的所有批次运行中,它将以完整管理员身份运行,但不会提示输入凭据,因为它们以加密方式存储在凭据管理器中,最终用户无法获取密码。以下应打开具有完全管理员权限的提升 CMD,并且只会在第一次提示输入密码:
START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
我已经使用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。
这是一种与资源管理器集成的方法。当您右键单击 Windows 资源管理器中的任何文件夹时,它将弹出一个额外的菜单项:
以下是步骤:
\HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin
\HKEY_CLASSES_ROOT\Folder\shell\dosherewithadmin\command
powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/k pushd "%1"'"
*我们使用pushd
而不是cd
允许它在任何驱动器中工作。:-)
Dheeraj Bhaskar 使用 Powershell 的方法中缺少空格,至少对于 Powershell 的 Windows 10 化身来说是这样。
他的 sudo.bat 里面的命令行应该是
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"
注意 %cd% 后的多余空格
;) 弗罗德
..
@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,它会要求你提供凭据并将你带回与管理员相同的位置...
对于 Cygwin 的粉丝:
cygstart -a runas cmd
与上面的一些其他解决方案类似,我创建了一个elevate
批处理文件,它运行一个提升的 PowerShell 窗口,绕过执行策略以启用从简单命令到批处理文件再到复杂 PowerShell 脚本的所有内容。我建议将其粘贴在 C:\Windows\System32 文件夹中以方便使用。
原始elevate
命令执行其任务,捕获输出,关闭生成的 PowerShell 窗口,然后返回,将捕获的输出写入原始窗口。
我创建了两个变体elevatep
和elevatex
,它们分别暂停和保持 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
)
当 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\"
%*
也许不是这个问题的确切答案,但这很可能是人们最终需要的。
回答有点晚了,但对于像我这样的迟到者来说还是回答了。我有两种方法。第一个是基于对@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 时,您可以在创建用户帐户之前使用内置的管理员帐户来运行程序和应用程序。资源
启用管理员帐户的步骤-
compmgmt.msc
将打开计算机管理窗口。runas
命令正常工作,我们需要设置密码)。现在,windows 将向您显示一个您可以接受的危及生命的警告。或者,如果您想安全起见,那么您应该在启用此帐户后登录并从那里设置密码。现在runas
命令应该可以工作了——启动一个标准的 cmd 并输入——
runas /user:administrator cmd
EXTRA:现在我们可以创建类似于 Linuxsudo
命令的东西。使用以下脚本创建一个sudo.bat文件并将其保存在 c:\windows 中。
@ECHO OFF
powershell -Command "runas /user:administrator %1"
现在我们可以做sudo cmd
我为我的 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%"
smartctl.cmd
smartctl.cmd
C:\Users\#YourName#\AppData\Roaming\Microsoft\Windows\StartMenu\Programs
smartctl
Pin to Start
The quickest way by far is to:
CTRL+ALT+DELETE
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.
利用:
start
, run
, cmd
, 那么control+shift+enter
您将获得 UAC,然后是提升的命令 shell。
您可以使用以下语法,我有同样的问题,认为不需要脚本。
runas /profile /user:domain\username cmd
这对我有用,在您的网络上可能会有所不同。
可以使用临时环境变量与提升的快捷方式(
开始.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 没有所需的命令
只需使用命令: runas /noprofile /user:administrator cmd
我通过在cmd中使用以下命令轻松做到了
runas /netonly /user:Administrator\Administrator cmd
输入此命令后,您必须输入您的管理员密码(如果您不知道您的管理员密码,请将其留空,然后按Enter或输入内容,对我有用)..
按 Windows + X 键,您现在可以选择具有管理员权限的 Powershell 或命令提示符。如果您是管理员,则可以使用。如果系统不是您的,该功能可能无法使用。
我在 .Net 4.8 ExecElevated.exe,13KB(VS 2022 源项目)中创建了这个工具,它将执行一个带有提升令牌的应用程序(在管理员模式下)。但是你会得到一个 UAC 对话框来确认!(如果 UAC 已被禁用,可能不会,还没有测试过)。
调用该工具的帐户也必须具有管理员权限。当然权利。
使用示例:
ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
我用runas /user:domainuser@domain cmd
它成功打开了一个提升的提示。
有几种方法可以打开提升的 cmd,但只有您的方法适用于标准命令提示符。您只需要输入user
not username
:
runas /user:machinename\adminuser cmd
请参阅Microsoft 社区的相关帮助。