如何从具有提升权限的命令行运行程序


Answers:


14

如果使用/ uac开关,则该实用程序- 隐藏启动 -可以完成您希望的操作。这是一个示例命令行:

hstart /UAC "notepad.exe"

这将弹出UAC对话框,而不是像runas一样要求输入密码。

在此处输入图片说明


2
警告:这个小工具是20美元。对于那些口袋很小的人,请改用RunAdmin :)
WeGoToMars

Windows 10上不会出现此问题
将于

50

有一个办法做到这一点在PowerShell中:

PS> Start-Process powershell -Verb runAs

19
似乎工作正常。从命令行,您可以执行例如powershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze 2014年

7
这应该标记为正确/最佳答案IMO-它在没有第三方公用程序的情况下可以工作。
crimbo

5
在@marsze-Fwiw的基础上,最简单的情况下的参数将进入其自己的单引号值,例如powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs"。谢谢!
ruffin

如何将提升的命令提示符的输出传递到当前正在执行的脚本中?
惠勒

@wheeler,我几乎确定您不能这样做,但是您可以返回退出代码:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam

6

基于Rustam答案,您可以:

  • su.bat使用以下单行代码在默认%PATH%中的某个位置创建批处理文件:@powershell start -verb runas %*
  • 将此功能添加到您的PowerShell $ profile中function su {start -verb runas @args}

现在您可以su <command> [parameters]在任何一个shell中发布!


2

RunAdmin是一个小型实用程序(150Kb),使您可以从命令行以提升的权限运行程序(它将显示UAC)。与Hidden Start相对的是freeare。


2

这对我来说适用于所有平台,包括Windows10。我的需求很简单,如果需要电源,也许可以采用这种方法。

我想出了一个sudo.cmd名为Linux sudo命令的小脚本。它认为足够好。我已经概述了要求,要遵循的步骤,并且脚本在底部,下面是一个示例。首先要提个警告。

警告:默认情况下,该命令在Windows系统目录中运行。您将首先要去cd安全的地方。

要求

  • 使用Windows .CMD
    或cmd-shell 特权的Administrator运行命令。
  • 需要对命令进行常规Windows特权检查
    • 换句话说,除非我已经使用特权帐户登录,否则该命令将不起作用。
  • 以管理员权限执行命令,并在脚本内调用时继续执行。因此,请等待命令完成。
  • 简单易行,它将始终有效
  • 如果我已经登录,则不需要每次都输入密码。
    • 更好的方法是是否可以像sudo在Linux 上的真实命令一样输入一次密码。

解决方案

  1. 创建命令脚本以执行所有传递的参数, sudo.cmd
  2. 创建Windows快捷方式,将命令脚本命名为:sudo.lnk
  3. sudo快捷方式放在Windows PATH中,以便可以看到它。
  4. 编辑快捷方式属性,使Start in:路径为空。
  5. 点击[ Advanced]按钮-检查Run as Administrator
  6. 在Windows路径中启用快捷方式,请使用PATHEXT环境变量viz。
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从命令返回为好。


2

该功能适用​​于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参数应该是一个参数,而不仅仅是启动过程的其他参数。
Appleshell

0

看一下Start ++ -它具有此功能以及许多其他有用的功能。要在UAC提示符下运行,只需sudo在命令行中使用您的程序名称,如下所示:

替代文字

这是其他一些功能(您也可以添加自己的功能):

替代文字

替代文字


看起来也不错,但是我已经使用了FARR,它具有与Start ++类似的功能以及更多功能(当然,sudo除外)。
卢卡斯·塞诺夫斯基

2
该链接显示“ 欢迎访问:brandontools.com”。该网页是免费的。想要购买brandontools.com?
xmojmr 2015年

1
如@xmojmr所说,该站点已死。如果您知道一个新位置(我没那么快找到一个位置),则应更新答案中的链接。
亚伯

-1

您可以设置__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兼容性工具包中列出了所有兼容模式选项。


该批处理文件已严重损坏。您不能将其;用作注释定界符。“批处理文件无法识别分号,通常会导致有关错误命令的错误消息。”
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.