当我已经处于未提升权限的命令行中时,是否可以通过提升权限来运行程序或命令?
与单击程序快捷方式并选择“以管理员身份运行”时执行的操作完全相同。
当我已经处于未提升权限的命令行中时,是否可以通过提升权限来运行程序或命令?
与单击程序快捷方式并选择“以管理员身份运行”时执行的操作完全相同。
Answers:
有一个办法做到这一点在PowerShell中:
PS> Start-Process powershell -Verb runAs
powershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
su.bat
使用以下单行代码在默认%PATH%中的某个位置创建批处理文件:@powershell start -verb runas %*
function su {start -verb runas @args}
现在您可以su <command> [parameters]
在任何一个shell中发布!
这对我来说适用于所有平台,包括Windows10。我的需求很简单,如果需要电源,也许可以采用这种方法。
我想出了一个sudo.cmd
名为Linux sudo命令的小脚本。它认为足够好。我已经概述了要求,要遵循的步骤,并且脚本在底部,下面是一个示例。首先要提个警告。
警告:默认情况下,该命令在Windows系统目录中运行。您将首先要去cd
安全的地方。
要求:
sudo
在Linux 上的真实命令一样输入一次密码。解决方案:
sudo.cmd
sudo.lnk
。sudo
快捷方式放在Windows PATH中,以便可以看到它。Start in:
路径为空。Advanced
]按钮-检查Run as Administrator
d:> echo %PATHEXT%
.lnk;.EXE;.CMD;.BAT;.COM
在sudo dir
命令行上键入时,Windows将显示
User Account Control
Do you want to allow this app to make changes to this device?
[YES] [NO]
访问控制弹出窗口。如果单击“ [ NO
]”,将不会发生任何事情。Windows将显示一条“ Access is denied.
”消息。
当您单击“ [ YES
]”时,目录命令以提升的特权运行。当然,您可能想要更有趣的东西,例如停止或查询服务:
sudo sc query SDRSVC
SDRSVC是“ Windows备份服务”的服务名称,在单独的Cmd窗口中显示以下内容:
[sudo]
administrator
---------------
sc query SDRSVC
SERVICE_NAME: SDRSVC
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
[done]
Press any key to continue . . .
该sudo.cmd
脚本本身是非常基本的。正如我所说,我的需求很简单。我只想在部署代码进行测试时停止和启动服务。
sudo.cmd
:
@echo off
@rem sudo.cmd
cd /d %temp%
@echo.
@echo. administrator
@echo. ---------------
cd
@echo.
@rem _________________________________________________
@rem -- Print usage . . .
@if [""] ==["%~1"] goto USAGE
@if /i ["--HELP"]==["%~1"] goto USAGE
@rem _________________________________________________
@rem
@echo. %*
@rem
%*
@rem
set EXIT_STATUS=%ERRORLEVEL%
@rem -- -- -- -- --
@echo.
@echo. [done]
@rem ______________________________________________________
:Exit
@echo.
@pause
exit /b %EXIT_STATUS%
@rem ______________________________________________________
:USAGE
@echo.
@echo ^Usage:
@echo. sudo ^<complete command line^>
@echo.
@echo. Attempts to rune the: ^<complete command line^>
@echo. under Administrator priviliges. Relies on Windows
@echo. prompt for elevated privileges.
@rem ______________________________________________________
@goto Exit
该pause
命令等待您查看结果。如果pause
取出管理窗口,则该窗口将关闭,并且您不知道该命令是否有效。在ERRORLEVEL
从命令返回为好。
该功能适用于Windows 10,尚未与其他Windows版本进行测试。
从cmd.exe使用管理员权限打开记事本的示例,该示例启动powershell并询问提升的权限。
C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"
这将为您提供一个[是] [否]的UAC对话框(如果启用),或者询问您管理员密码。
使用记事本打开主机文件的另一个示例是:
C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"
详细信息:https : //docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/start-process?view=powershell-6
-ArgumentList
参数应该是一个参数,而不仅仅是启动过程的其他参数。
看一下Start ++ -它具有此功能以及许多其他有用的功能。要在UAC提示符下运行,只需sudo
在命令行中使用您的程序名称,如下所示:
这是其他一些功能(您也可以添加自己的功能):
您可以设置__COMPAT_LAYER=RunAsAdmin
。然后,这些命令将在单独的高架中运行cmd
。
范例.bat
:
rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f
MS Application兼容性工具包中列出了所有兼容模式选项。
;
用作注释定界符。“批处理文件无法识别分号,通常会导致有关错误命令的错误消息。”