@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
)
3
..
@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
18 回答
我遇到了同样的问题,我能够以CMD的管理员身份打开CMD的唯一方法是执行以下操作:
打开CMD
写入
powershell -Command "Start-Process cmd -Verb RunAs"
并按Enter键将出现一个弹出窗口,要求以管理员身份打开CMD
根据documentation,Windows安全模型......
您可以在“创建新任务”对话框中选择“使用管理权限创建此任务”选项(“任务管理器”>“文件”>“运行新任务”),但没有内置方法可以使用命令行有效提升权限 .
但是,您可以使用一些第三方工具(内部依赖Windows API)从命令行提升权限:
NirCmd:
下载并解压缩 .
nircmdc elevate cmd
windosu:
安装它:
npm install -g windosu
(需要安装node.js)sudo cmd
我在这里尝试其他答案后做的简单方法
方法1:没有第三方程序(我用过这个)
使用以下内容创建一个名为
sudo.bat
的文件(您可以用您想要的任何名称替换sudo
)powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
将
sudo.bat
移至PATH
中的文件夹;如果您不知道这意味着什么,只需将这些文件移动到c:\windows\
现在
sudo
将在运行对话框(win r)或资源管理器地址栏中工作(这是最好的部分:))方法2:使用第三方程序
下载NirCmd并解压缩 .
使用以下内容创建名为
sudo.bat
的文件(您可以使用任何名称替换sudo
)nircmdc elevate cmd /k "cd /d %cd%"
将
nircmdc.exe
和sudo.bat
移至PATH
中的文件夹;如果您不知道这意味着什么,只需将这些文件移至c:\windows\
现在
sudo
将在运行对话框(win r)或资源管理器地址栏中工作(这是最好的部分:))我一直使用nirsoft程序(例如nircmdc)和sysinternals(例如psexec) . 他们非常有帮助 .
但是,如果你不想或不想,那就是第三方程序,这是另一种方式,纯粹的Windows .
Short answer :您可以在提升时创建具有提升权限的计划任务,然后您可以在不提升时调用 .
Middle-length answer :提升创建任务时(但我更喜欢任务调度程序GUI):
然后,不需要提升,调用
Long answer :有很多烦躁的细节;看我的博客文章"Start program WITHOUT UAC, useful at system start and in batch files (use task scheduler)"
我没有足够的声誉来为最佳答案添加评论,但凭借别名的强大功能,只需输入以下内容即可获得:
这只是user3018703优秀解决方案的缩短版本:
以下作为批处理文件将打开一个提升的命令提示符,其路径设置为与调用批处理文件的目录相同的目录
我现在已经使用了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 .使用
/savecred
开关使批处理文件保存实际管理员帐户的凭据 . 这将首次提示凭据,然后将加密的密码存储在凭证管理器中 . 然后,对于批次运行的所有后续时间,它将作为完整管理员运行但不提示凭证,因为它们以加密方式存储在凭证管理器中,并且最终用户无法获取密码 . 以下应该以完全管理员权限打开提升的CMD,并且仅在第一次提示输入密码时:我最喜欢的方法是使用SysInternals的PsExec.exe,可在http://technet.microsoft.com/en-us/sysinternals/bb897553获取
“-h”开关是做魔术的开关:
-h如果目标系统是Vista或更高版本,则运行该进程使用帐户的提升令牌(如果可用) .
虽然Dheeraj Bhaskar提供的两种解决方案都可以工作,但不幸的是它们会导致 UAC 对话框显示在顶部(z顺序)但是 not 得到 focused (聚焦窗口是调用者cmd / powershell窗口),因此我需要 grab 鼠标并单击"yes",或使用Alt Shift Tab选择UAC窗口 . (在Win10x64 v1607 build14393.447上测试; UAC = "[...] do not dim [...]" . )
以下解决方案有点尴尬,因为它使用两个文件,但它保留了正确的焦点顺序,因此不需要额外的鼠标/键盘操作(除了确认UAC对话框:Alt Y) .
cmdadm.lnk(快捷方式属性/高级... /以管理员身份运行=开启)
%SystemRoot%\System32\cmd.exe /k "cd /d"
su.bat
@start cmdadm.lnk %cd%
运行
su
.与上面的其他一些解决方案类似,我创建了一个
elevate
批处理文件,该文件运行一个提升的PowerShell窗口,绕过执行策略以启用从简单命令到批处理文件到复杂PowerShell脚本的所有操作 . 我建议将其粘贴在C:\ Windows \ System32文件夹中以便于使用 .原始
elevate
命令执行其任务,捕获输出,关闭生成的PowerShell窗口,然后返回,将捕获的输出写出到原始窗口 .我创建了两个变体
elevatep
和elevatex
,它们分别暂停并保持PowerShell窗口打开以进行更多工作 .https://github.com/jt-github/elevate
如果我的链接死了,这里是原始提升批处理文件的代码:
..
将此脚本保存为system32中的“god.cmd”或您的路径指向的任何内容....
如果你在e:\ mypictures \中打开一个cmd并输入god,它会询问你的凭据并让你回到与管理员相同的地方......
可以使用临时环境变量与提升的快捷方式一起使用(
start.cmd
ascladm.lnk(快捷方式)
(要进行路径更改,您需要暂时创建
env.Variable
)ascladm.cmd
)(targetedCmd在高架cmd窗口中执行)
虽然它是3个文件,但您可以将所有内容(包括targetedCmd)放在某个子文件夹中(不要忘记将folderName添加到补丁中)并将“start.cmd”重命名为target的一个名称
对我来说,这看起来像是大多数本地方式,而cmd没有所需的命令
我不确定工具ExecElevated.exe(13KB)是否可以完成这项任务....但它可能会 . 或者至少对那些有类似需求的人有用,他们像我一样来到这个页面(但是我找不到解决方案,所以我最终在.Net中创建了这个工具) .
它将使用提升的令牌(在管理模式下)执行应用程序 . 但是你会得到一个UAC对话框来确认! (如果UAC已被禁用,可能没有,但尚未对其进行测试) .
调用该工具的帐户还必须具有admin . 权利当然 .
使用示例:
按Windows X键,您现在可以选择具有管理员权限的Powershell或命令提示符 . 如果您是管理员,则可以使用 . 如果系统不是您的,则该功能可能无法使用 .
我在 cmd 中使用以下命令轻松完成了
runas /netonly /user:Administrator\Administrator cmd
输入此命令后,您必须输入您的管理员密码(如果您不知道您的管理员密码,请将其留空并按 Enter 或键入内容,为我工作)..
有几种方法可以打开高架cmd,但只有您的方法可以在标准命令提示符下运行 . 你只需要把
user
不username
:请参阅Microsoft community的相关帮助 .
我使用
runas /user:domainuser@domain cmd
成功打开了一个提升的提示 .