【发布时间】:2013-10-06 13:05:23
【问题描述】:
如何在普通 cmd 上使用命令行打开提升的命令提示符?
比如我用runas /username:admin cmd但是打开的cmd好像没有提升!有什么解决办法吗?
【问题讨论】:
-
我尝试了所有的答案。最有用的答案没有任何软件,最少没有动作是stackoverflow.com/a/40942828/9217577
如何在普通 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"
【讨论】:
-v 不再是-Verb 的快捷方式,因为-Verb 和-Verbose 之间存在歧义,所以需要明确拼写出-Verb
根据documentation,Windows 安全模型...
根本不授予管理权限 次。 即使管理员在标准权限下运行,当他们 执行不需要提升的非管理任务 特权。
您在创建新任务对话框中有使用管理权限创建此任务选项(任务管理器>文件>运行新任务) ,但没有内置方法可以使用命令行有效提升权限。
但是,您可以使用一些第三方工具(内部依赖于 Windows API)从命令行提升权限:
nircmdc elevate cmdnpm install -g windosu(需要安装node.js)sudo cmd【讨论】:
nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1 终于成功了。其他runas /user:... 方式提示输入密码,尽管已经是管理员(杀死批处理模式)。
nircmdc elevate cmd
nircmd 后,要让它像 Linux sudo 一样工作,请在您的路径中创建一个 sudo.bat 文件,其中包含以下内容:nircmd elevate %*。然后你可以这样做,例如,sudo net stop W3SVC
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) 或资源管理器地址栏中工作(这是最好的部分 :))【讨论】:
我一直使用 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
长答案:有很多烦人的细节;请参阅我的博客条目"Start program WITHOUT UAC, useful at system start and in batch files (use task scheduler)"
【讨论】:
以下作为批处理文件将打开提升的命令提示符路径设置为与调用批处理文件的目录相同的目录
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)但 not 得到 focused(焦点窗口是调用方 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。
【讨论】:
..
@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:\mypictures\ 中打开一个 cmd 并输入 god 它会要求您提供凭据并将您带回与管理员相同的位置...
【讨论】:
Dheeraj Bhaskar 使用 Powershell 的方法中缺少空格,至少对于 Powershell 的 Windows 10 化身来说是这样。
他的sudo.bat里面的命令行应该是
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"
注意 %cd% 后面的多余空格
;)弗罗德
【讨论】:
这是一种与资源管理器集成的方法。 当您在 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 以允许它在任何驱动器中工作。 :-)
【讨论】:
与上面的其他一些解决方案类似,我创建了一个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
)
【讨论】:
对于 Cygwin 的粉丝:
cygstart -a runas cmd
【讨论】:
【讨论】:
cmd -v runas。为什么这东西最终会要求管理权限?
当 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 会在 elevated shell 中重新启动当前脚本(及其参数),然后关闭未提升的脚本。
要允许运行脚本-ex Unrestricted 是必要的。
-Command 执行以下字符串。
Start-Process -Verb RunAs 运行一个进程以管理员身份:
shell(%ComSpec%,通常是C:\Windows\System32\cmd.exe)启动(/c)当前脚本(\"%~fnx0\")并传递其参数(%*)。
也许不是这个问题的确切答案,但它很可能正是人们最终需要的。
【讨论】:
回答有点晚了,但对于像我这样的迟到者来说,无论如何都要回答。 我有两种方法。第一个是基于对@Dheeraj Bhaskar 的回答的微小改动,第二个是新的(这里的任何答案中都没有提到)。
方法一:为windows创建admin命令(只是为了灵活)。
@ECHO OFF
powershell -Command "Start-Process %1 -Verb RunAs"
打开记事本 -> 复制/粘贴上面的脚本 -> 将其保存为 c:\windows 中的 admin.bat
可以在上面的脚本中添加很多内容以使其更好,但我尽量保持简单,而且我不是批处理脚本专家。
现在您可以使用 admin 作为命令来运行具有提升权限的任何其他命令或应用程序。
要回答原始问题 - 在标准 cmd 中键入 admin cmd。
方法 2:使用 runas 命令。为此,我们需要启用内置管理员帐户(如果尚未启用)并设置密码。大多数系统默认禁用此帐户。
在制造 PC 时,您可以在创建用户帐户之前使用内置的管理员帐户来运行程序和应用程序。 Source
启用管理员帐户的步骤-
compmgmt.msc,这将打开计算机管理窗口。runas命令工作我们需要设置密码)。
现在,windows 将向您显示一个您可以接受的危及生命的警告。
或者,如果您想安全起见,则应在启用此帐户后登录该帐户并从那里设置密码。现在runas 命令应该可以工作了-
启动标准 cmd 并输入-
runas /user:administrator cmd
额外:
现在我们可以创建类似于 Linux 的 sudo 命令的东西。使用以下脚本创建 sudo.bat 文件并将其保存在 c:\windows 中。
@ECHO OFF
powershell -Command "runas /user:administrator %1"
现在我们可以做sudo cmd
【讨论】:
用途:
start、run、cmd,然后是control+shift+enter
您将获得 UAC,然后是提升的命令外壳。
【讨论】:
目前最快的方法是:
CTRL+ALT+DELETEFILE > Run New Task > type in "cmd" 并勾选“使用管理权限创建此任务”。盒子。不确定这是否有帮助,但这是我设法做到的。如果您需要从批处理运行命令,但嘿嘿......我需要这个只是因为 Windows 资源管理器已损坏并需要修复它。
这是我的解决方法。如果不是原始海报,希望这对某人有所帮助。
【讨论】:
我为我的 smartctl 做了这个,它变成了一个便携式应用程序。 我从here.借来的
@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
【讨论】:
可以使用临时环境变量与提升的快捷方式一起使用(
start.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个文件,你可以把所有东西(包括targetedCmd)放在某个子文件夹中(别忘了把folderName添加到补丁中)并将“start.cmd”重命名为target的一个名字
对我来说,这看起来像是最原生的方式,而 cmd 没有所需的命令
【讨论】:
您可以使用以下语法,我有同样的问题,认为不需要脚本。
runas /profile /user:domain\username cmd
这对我有用,在您的网络上可能会有所不同。
【讨论】:
只需使用命令: runas /noprofile /user:administrator cmd
【讨论】:
我通过在 cmd
中使用以下命令轻松做到了runas /netonly /user:Administrator\Administrator cmd
输入此命令后,您必须输入您的管理员密码(如果您不知道您的管理员密码,请将其留空,然后按 Enter 或输入一些内容,对我有用)..
【讨论】:
按下 Windows + X 键,您现在可以选择具有管理员权限的 Powershell 或命令提示符。如果您是管理员,则可以使用。如果系统不是您的,该功能可能无法使用。
【讨论】:
我在 .Net ExecElevated.exe, 13KB 中创建了这个工具,它将使用提升的令牌执行应用程序(在管理员模式下)。 但是你会得到一个 UAC 对话框来确认! (如果 UAC 已被禁用,可能不会,还没有测试过)。
调用该工具的帐户也必须具有管理员权限。当然是权利。
使用示例:
ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
【讨论】:
我使用runas /user:domainuser@domain cmd 成功打开了提升的提示。
【讨论】:
有多种方法可以打开提升的 cmd,但只有您的方法适用于标准命令提示符。你只需要输入user 而不是username:
runas /user:machinename\adminuser cmd
查看Microsoft community的相关帮助。
【讨论】: