【问题标题】:Batch Script to Run as Administrator以管理员身份运行的批处理脚本
【发布时间】:2013-01-16 09:04:57
【问题描述】:

我正在编写一个客户端/服务器检查程序,但它需要以管理员身份运行。

我希望它在我的网络和用户上静默运行,并且我不希望“以管理员身份运行”提示。是否有任何开始代码可以放入批处理文件中以使其自动运行管理员?

【问题讨论】:

    标签: batch-file administrator runas


    【解决方案1】:

    我的解决方案,如果你不需要 .bat 文件,将批处理文件转换为 .exe 文件,然后你将能够设置以管理员身份运行。

    【讨论】:

      【解决方案2】:

      不要浪费你的时间,使用这一行命令以管理员身份运行命令行:

      echo createobject("shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs
      

      如果你想以管理员权限启动任何应用程序,你只需在我的程序文件中写下这个应用程序的漏洞路径,比如这个记事本++:

      echo createobject("shell.application").shellexecute "%programfiles%\Notepad++\notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs
      

      【讨论】:

        【解决方案3】:

        无效的解决方案

        否: - 创建快捷方式 [ -> 兼容性 -> “以管理员身份运行此程序” ] 解决方案不起作用。

        此选项在 Windows 7 中显示为灰色。即使禁用了 UAC

        否:runas /env /user:domain\Administrator <program.exe/command you want to execute> 也不够用,因为它会提示用户输入管理员密码。

        有效的解决方案

        是:禁用 UAC -> 使用任务调度程序创建作业,这对我有用。

        • 在任务计划程序下创建一个作业,并使其以具有管理员权限的用户身份运行。
        • 明确标记:“以最高权限运行”
        • 禁用 UAC,因此不会提示运行此任务

        如果您愿意,您可以通过编辑注册表让脚本随后启用 UAC。在我的情况下,该脚本仅通过创建 Windows 虚拟机运行一次,其中 UAC 在映像中被禁用。

        仍然期待以管理员身份运行脚本而没有太多麻烦的最佳方法。

        【讨论】:

          【解决方案4】:

          由于到目前为止我还没有找到任何简单的脚本,这是我的两分钱:

          set ELEVATE_APP=Full command line without parameters for the app to run
          set ELEVATE_PARMS=The actual parameters for the app
          echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs
          echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs
          echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs
          echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs
          DEL elevatedapp.vbs
          

          【讨论】:

            【解决方案5】:

            以下是一种解决方法:

            1. 创建 .bat 文件的快捷方式
            2. 打开快捷方式的属性。在快捷方式选项卡下,点击高级
            3. 勾选“以管理员身份运行”

            运行快捷方式将以管理员身份执行您的批处理脚本。

            【讨论】:

              【解决方案6】:
              @echo off
              
               call :isAdmin
              
               if %errorlevel% == 0 (
                  goto :run
               ) else (
                  echo Requesting administrative privileges...
                  goto :UACPrompt
               )
              
               exit /b
              
               :isAdmin
                  fsutil dirty query %systemdrive% >nul
               exit /b
              
               :run
                <YOUR BATCH SCRIPT HERE>
               exit /b
              
               :UACPrompt
                 echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
                 echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
              
                 "%temp%\getadmin.vbs"
                 del "%temp%\getadmin.vbs"
                exit /B`
              

              【讨论】:

                【解决方案7】:

                创建快捷方式并将快捷方式设置为始终以管理员身份运行。

                How-To Geek 论坛Make a batch file to run cmd as administrator 解决方案:

                在编辑器中创建一个批处理文件并命名it.bat,然后为其创建一个快捷方式。 Nameit.bat - 快捷方式。然后右键单击 Nameit.bat - 快捷方式 -> 属性 -> 快捷方式选项卡 -> 高级,然后单击以管理员身份运行。从快捷方式执行它。

                【讨论】:

                • 您不能在批处理文件或指向它的快捷方式上设置“以管理员身份运行”,这很烦人。
                • 您不能在批处理文件上设置它 - 但您可以在指向它的快捷方式上设置它
                【解决方案8】:

                我对 Matt 的脚本进行了轻微修改,使其能够在单个脚本中运行(只需将其添加到任何需要 UAC 调用的脚本的开头),但请阅读下面的代码以获得更好的解决方案在博客上找到:

                :: ### START UAC SCRIPT ###
                
                if "%2"=="firstrun" exit
                cmd /c "%0" null firstrun
                
                if "%1"=="skipuac" goto skipuacstart
                
                :checkPrivileges
                NET FILE 1>NUL 2>NUL
                if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
                
                :getPrivileges
                if '%1'=='ELEV' (shift & goto gotPrivileges)
                
                setlocal DisableDelayedExpansion
                set "batchPath=%~0"
                setlocal EnableDelayedExpansion
                ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
                ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
                "%temp%\OEgetPrivileges.vbs"
                exit /B
                
                :gotPrivileges
                
                setlocal & pushd .
                
                cd /d %~dp0
                cmd /c "%0" skipuac firstrun
                cd /d %~dp0
                
                :skipuacstart
                
                if "%2"=="firstrun" exit
                
                :: ### END UAC SCRIPT ###
                
                :: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ###
                

                如您所见,我的修改使用了两个文件参数,这不是特别优雅,但可以完成工作(您始终可以通过使用虚拟占位符保留前几个参数将它们隐藏在尾部)。此外,AFAIK Matt 的脚本不支持文件路径中的空格,此限制也适用于我对此脚本的修改。

                这个问题似乎是 VBS 处理这些路径的方式所固有的,但在下面的链接中,有一个更好的基于 VBS 的解决方案,用于调用从单个脚本中运行的 UAC,而无需使用文件参数这样的解决方法,它还支持文件路径中的空格:

                http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/

                如您所见,此链接上的脚本会进行稍微不同的 VBS 调用,这出于某种原因规避了空格问题。

                【讨论】:

                  【解决方案9】:

                  如果上述所有答案都不符合您的喜好,您可以使用 autoIT 以特定用户的身份使用其凭据运行您的文件(或任何文件)。

                  将使用该用户权限运行程序的脚本示例。

                  installAdmin()
                  
                  Func installAdmin()
                      ; Change the username and password to the appropriate values for your system.
                      Local $sUserName = "xxxxx"
                      Local $sPassword = "xxx"
                      Local $sDirectory = "C:\ASD4VM\Download\"
                      Local $sFiletoRun = "Inst_with_Privileges.bat"
                  
                      RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun)
                  EndFunc   ;==>Example
                  

                  AutoIT can be found here. -> 使用.ua3格式编译成可以运行的.exe文件。

                  【讨论】:

                    【解决方案10】:

                    您可以将其作为启动项...启动项根本不会显示以管理员身份运行的提示。

                    查看这篇文章Elevated Program Shortcut Without UAC rompt

                    【讨论】:

                    • Stack Overflow 上的答案不应包含“Google to find answer”。
                    【解决方案11】:

                    你有几个选择。

                    1. 如果您只需要使用批处理文件和本机命令,请查看How can I auto-elevate my batch file, so that it requests from UAC admin rights if required?

                    2. 如果可以选择第三方实用程序,您可以使用Elevate 之类的工具。它是一个可执行文件,您可以将要运行的程序作为参数调用。
                      像这样: elevate net share ...

                    【讨论】:

                      【解决方案12】:

                      可以使用语法:

                      RUNAS [/profile] [/env] [/netonly] /user:user Program
                      
                      Key :
                      /profile Option to load the user's profile (registry)
                      /env Use current environment instead of user's.
                      /netonly Use the credentials specified only for remote connections.
                      /user Username in form USER@DOMAIN or DOMAIN\USER
                      (USER@DOMAIN is not compatible with /netonly)
                      Program The command to execute
                      

                      例子:

                      runas /env /user:domain\Administrator <program.exe/command you want to execute>
                      

                      【讨论】:

                      • 这会提示输入他不想要的密码。
                      • @eddyq 没错,但这回答了问题的标题,即使问题的主体改变了他所说的他想要的。
                      • 标题不是问题。正文是问题。标题就是标题。正文优先,因为它包含详细信息。
                      猜你喜欢
                      • 2015-04-17
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-01-20
                      • 2018-06-02
                      • 1970-01-01
                      • 2014-07-26
                      • 2022-01-08
                      • 1970-01-01
                      相关资源
                      最近更新 更多