Answers:
我遇到了同样的问题,我能够以CMD管理员身份打开CMD的唯一方法是执行以下操作:
powershell -Command "Start-Process cmd -Verb RunAs"
并按Enter根据文档,Windows安全模型...
不会始终授予管理特权。当管理员执行不需要提升特权的非管理任务时,甚至管理员也可以在标准特权下运行。
您可以在“ 创建新任务”对话框(“ 任务管理器”>“文件”>“运行新任务”)中使用“使用管理特权创建此任务”选项)中,但是没有内置的方法可以使用命令行有效地提升特权。
但是,有一些第三方工具(内部依赖于Windows API)可用于从命令行提升特权:
nircmdc elevate cmd
npm 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
windosu
:)
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
然后,不需要高程,调用
schtasks /run /tn cmd_elev
长答案:有很多烦躁的细节;请参阅我的博客条目“无UAC的启动程序,对系统启动和批处理文件有用(使用任务计划程序)”
我最喜欢的方法是使用SysInternals的PsExec.exe,网址为http://technet.microsoft.com/zh-cn/sysinternals/bb897553
.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe
“ -h”开关是执行魔术操作的开关:
-h如果目标系统是Vista或更高版本,则使用该帐户的提升的令牌运行该进程(如果有)。
通过使用/savecred
开关,使批处理文件保存实际管理员帐户的凭据。这将在第一次提示输入凭据时,然后将加密的密码存储在凭据管理器中。然后,对于批处理运行的所有后续时间,它将以完全管理员身份运行,但不会提示输入凭据,因为它们以加密方式存储在凭据管理器中,并且最终用户无法获取密码。以下内容应使用完全的管理员权限打开提升的CMD,并且仅在第一次时提示输入密码:
START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
虽然通过Dheeraj巴斯卡尔工作提供了两种解决方案,遗憾的是他们将导致UAC显示在顶部(z顺序明智)对话框,但没有得到关注(焦点窗口是调用者CMD / PowerShell窗口),所以我要么需要抓住鼠标并单击“是”,或使用Alt + Shift + Tab选择UAC窗口。(在Win10x64 v1607 build14393.447上进行了测试; UAC = “ [...]不会变暗[...]”。)
以下解决方案有点尴尬,因为它使用了两个文件,但是保留了正确的焦点顺序,因此不需要额外的鼠标/键盘操作(除了确认UAC对话框:Alt + Y)。
%SystemRoot%\System32\cmd.exe /k "cd /d"
@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.
我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
将此脚本另存为system32或任何路径所指向的“ god.cmd”。
如果您在e:\ mypictures \中打开一个cmd并键入God,它将要求您提供凭据并将您带回到与管理员相同的位置...
与上述其他一些解决方案类似,我创建了一个 elevate
批处理文件,该文件运行一个提升的PowerShell窗口,绕过执行策略以启用从简单命令到批处理文件到复杂PowerShell脚本的所有运行。我建议将其粘贴在C:\ Windows \ System32文件夹中,以方便使用。
原始elevate
命令执行其任务,捕获输出,关闭生成的PowerShell窗口,然后返回,将捕获的输出写出到原始窗口。
我创建了两个变体,elevatep
并且elevatex
它们分别暂停并保持PowerShell窗口打开以进行更多工作。
https://github.com/jt-github/elevate
如果我的链接消失了,这是原始的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
)
可以使用临时环境变量与提升的快捷方式一起使用(
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没有所需的命令
我不确定工具ExecElevated.exe(13KB)是否能完成工作....但是可以。或至少对像我一样访问此页面的其他人有用(但我没有找到解决方案,所以最终我自己在.Net中创建了该工具)。
它将执行具有提升令牌的应用程序(在管理模式下)。但是您将获得一个UAC对话框进行确认!(如果未禁用UAC,可能尚未测试)。
并且调用该工具的帐户还必须具有管理员。权利。
使用示例:
ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
Dheeraj Bhaskar使用Powershell的方法中缺少空间,至少对于Windows 10的Powershell化身而言。
他的sudo.bat中的命令行应该是
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"
请注意%cd%之后的多余空间
;)
这是与资源管理器集成的方法。在Windows资源管理器中的任何文件夹上单击鼠标右键时,它将弹出一个额外的菜单项:
步骤如下:
*使用push而不是cd使其可以在任何驱动器中工作。:-)
我通过在cmd中使用以下命令轻松做到了
Runas / netonly / user:Administrator \ Administrator cmd
键入此命令后,必须输入管理员密码(如果您不知道管理员密码,请将其保留为空白,然后按Enter或键入一些对我有用的密码)。
有几种打开提升的cmd的方法,但是只有您的方法可以在标准命令提示符下使用。你只需要把user
不username
:
runas /user:machinename\adminuser cmd
请参阅Microsoft社区的相关帮助。
我用runas /user:domainuser@domain cmd
哪个成功打开了提升的提示。