【问题标题】:Automatically running a batch file as an administrator以管理员身份自动运行批处理文件
【发布时间】:2013-09-16 07:48:48
【问题描述】:

如何从另一个具有管理员权限的批处理文件运行批处理文件?

我试过RUNAS命令,但它需要管理员密码。

我正在寻找通过右键单击批处理文件并以管理员身份运行的替代方法。我想从另一个批处理文件中自动化它。

【问题讨论】:

  • user93353 给了你答案,没有别的办法。出于安全原因。另一种选择是授予您的用户在您正在寻找的资源上执行或写入的权限。如果可以,请详细说明您想要实现的目标。
  • @Endoro - 这不是一个重复 - 他正在询问如何以非交互方式进行操作 - 另一个答案以交互方式进行。
  • 感谢大家的回复。我使用 Windows 的 UAC 控制来禁用身份验证,以便我可以从批处理文件运行批处理文件。

标签: batch-file


【解决方案1】:

我发现可行的完整解决方案是:

@echo off
cd /D "%~dp0"
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
"Put your command here"

归功于: https://stackoverflow.com/a/51472107/15087068

https://serverfault.com/a/95696

【讨论】:

    【解决方案2】:

    CMD本身并没有admin运行文件的功能,但是powershell有,而且powershell的功能可以通过CMD用一定的命令来执行。将其写入命令提示符以运行您指定为管理员的文件。

    powershell -command start-process -file yourfilename -verb runas
    

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      将cmd中的每一行或批处理文件中的所有主题:

      @echo off
      
      if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
      
      "Put your command here"
      

      对我来说很好用。

      【讨论】:

      • 警告:它可以工作,但是在运行批处理文件时,您的命令的工作目录将是C:\WINDOWS\system32。通常(没有海拔)批处理文件的工作目录将是批处理文件所在的文件夹。
      【解决方案4】:

      如果有人希望他们可以在批处理文件中尝试,我会使用这个技巧。这将在您运行批处理文件时为您提供管理员提示

      @echo off
      cd \ && cd windows/system32 && command which needs admin credentials
      pause
      

      【讨论】:

        【解决方案5】:

        使用

        runas /savecred /profile /user:Administrator whateveryouwanttorun.cmd
        

        它只会在第一次询问密码。它不会再次要求输入密码,除非更改密码等。

        【讨论】:

        • 这将允许用户以管理权限运行任意命令,因此您也可以让他成为本地管理员组的成员。
        • @AnsgarWiechers - 用他自己的话说,I am searching for an alternative for running a batch file by right clicking on it and running as an administrator. i want to automate it from another batch file. - 如果他能够通过右键单击运行它并以管理员身份运行,那么他已经知道管理员密码 - 这就像 linux 上的 sudo。另一件事是,没有管理员密码就无法使用。
        • 正确,但无关紧要。 sudo 可以限制为特定命令,runas /savecred 不能。如果您删除密码提示,您将有效地消除管理员和普通用户之间的障碍。更好的方法可能是创建计划任务。
        • @AnsgarWiechers - 在这种情况下,用户可以访问 root/admin 密码。在 Linux 中,如果他有 root 密码,他可以修改 sudoers 文件以消除对 sudo 的任何限制。
        • AFAIK,runas.exe 不会引发提升提示,这似乎是 OP 所指的。
        【解决方案6】:

        在 Windows 7 上:

        1. 创建该批处理文件的快捷方式

        2. 右键单击该快捷方式文件并选择属性

        3. 点击Advanced按钮,找到以管理员身份运行的复选框

        查看下面的截图

        【讨论】:

        • 错误答案。 OP 要求一种方法以管理员身份从 在另一个批处理文件中运行批处理文件,但这种方式不起作用。
        • @prodigy,你试过并确认它不起作用吗?
        • 我可能应该指定我不久前在 XP 上尝试过这个,但没有成功。我最近没有尝试过,所以我可能错了,或者我做的时候做错了。
        【解决方案7】:

        您可以使用PowerShella.bat 以管理员身份运行b.bat:

        set mydir=%~dp0
        
        Powershell -Command "& { Start-Process \"%mydir%b.bat\" -verb RunAs}"
        

        它将通过确认对话框提示用户。用户选择YES,则b.bat将以管理员身份运行。

        【讨论】:

          【解决方案8】:

          如果您尝试调用 Windows UAC 提示符(使整个屏幕变黑并询问您是否为以下任务授予管理员权限的提示符),RUNAS 并不是最流畅的方法,因为:

          1. 您不会收到 UAC 授权提示,即使以管理员身份登录并且
          2. RUNAS 希望您拥有管理员密码,即使您的用户被设置为本地管理员,在这种情况下,以前的密码不是一种可靠的安全做法,尤其是在工作环境中。

          请尝试复制并粘贴以下代码,以确保您的批处理文件以管理员权限运行:

          @echo off
          
          >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
          
          if '%errorlevel%' NEQ '0' (
              echo Requesting Admin access...
              goto goUAC )
              else goto goADMIN
          
          :goUAC
              echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
              set params = %*:"=""
              echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
              "%temp%\getadmin.vbs"
              del "%temp%\getadmin.vbs"
              exit /B
          
          :goADMIN
              pushd "%CD%"
              CD /D "%~dp0"
          
          rem --- FROM HERE PASTE YOUR ADMIN-ENABLED BATCH SCRIPT ---
          echo Stopping some Microsoft Service...
          net stop sqlserveragent
          rem --- END OF BATCH ----
          

          此解决方案在启用 UAC 的 Windows 7、8.1 和 10 设置下 100% 运行。

          【讨论】:

          • 对不起,对我的回答投了反对票的愤怒的家伙。他显然没有尝试过,公平地说,我确实回答了开始这个线程的问题。这种无知的消极情绪会阻止贡献者将时间浪费在那些在没有证据的情况下投票否决之前不尝试答案的人身上。
          • 我认为你的问题是你写了这么很多代码,而已经发布了更短更简单的解决方案。
          • else goto goADMIN 应该简单地替换为 goto goADMIN
          【解决方案9】:

          Runas.exe 在这里不起作用。您可以使用 VBScript 调用“以管理员身份运行”shell 动词。 Elevation Powertoys 包含一个批处理文件,允许您调用提升的命令:

          elevatecmd.exe

          http://blogs.technet.com/b/elevationpowertoys/

          【讨论】:

          • 这将引发海拔提示,但不会绕过它。
          猜你喜欢
          • 2017-01-23
          • 2012-10-06
          • 2013-05-29
          • 1970-01-01
          • 1970-01-01
          • 2015-02-09
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多