批处理脚本以管理员身份运行(Batch Script to Run as Administrator

2019-07-19 02:21发布

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

我想这是我的网络和用户上静默运行,而我不希望“运行为”管理员”的提示。有没有开始的代码,我可以放入批处理文件,使其自动以管理员身份运行?

Answer 1:

没有工作的解决方案

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

此选项在Windows 7变灰即使禁用UAC

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

解决方案合作

是:禁用UAC - >创建一个使用任务调度工作,这为我工作。

  • 在创建任务调度工作,并使其运行与管理员权限的用户。
  • 明确标注:“使用最高权限运行”
  • 禁用UAC所以不会有任何提示运行这个任务

您可以让脚本使UAC事后编辑,如果你想在注册表中。 在我的情况下,该脚本由创建Windows虚拟机,其中UAC图像中被禁用的只跑了一次。

还在期待为以管理员身份运行一个脚本没有太多的麻烦,最好的办法。



Answer 2:

@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`


Answer 3:

其可能使用的语法:

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>


Answer 4:

以下是一个变通办法:

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

运行该快捷方式将执行批处理脚本管理员。



Answer 5:

你有几个选项。

  1. 如果您需要做的仅仅使用一个批处理文件和本机命令它,看看我怎么能自动提升我的批处理文件,所以它从UAC管理员权限,如果需要的请求? 。

  2. 如果第三方工具是一种选择,你可以像使用工具提升 。 这是你要运行提升作为参数调用程序的可执行文件。
    就像这样: elevate net share ...



Answer 6:

我做了这个轻微修改马特的脚本,使其能够从一个脚本(刚加入这需要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 ###

我修改使用两个文件的参数,你可以看到,这是不是特别优雅,但做这项工作(和你总是可以通过保留使用虚拟占位符的前几个参数隐藏掉在尾部)。 此外,据我所知马特的脚本不支持空格文件路径和此限制也适用于我此脚本的修改。

这个问题似乎是在VBS处理这些路径,但下面的链接有用于调用UAC的甚至更好的基于VBS的解决方案,从一个单一的脚本中使用文件的参数,并且也运行,而不需要像这样的解决办法的方式固有的支持在文件路径的空间:

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

此链路上的脚​​本,使稍有不同VBS电话,你会发现,由于某种原因与空间绕开的问题。



Answer 7:

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

如何对野人论坛制作一个批处理文件来运行CMD以管理员身份解决方案:

制作一个批处理文件,在编辑器和nameit.bat然后创建一个快捷方式。 Nameit.bat - 快捷方式。 然后右键单击Nameit.bat - 快捷方式 - >属性 - >快捷方式选项卡 - >高级,然后单击以管理员身份运行。 从快捷方式执行。



Answer 8:

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

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


Answer 9:

你可以把它作为一个启动项...启动项不炫耀的提示,以管理员身份运行在所有。

检查本文高架程序快捷方式没有UAC rompt



Answer 10:

如果以上的答案是不是你喜欢的,你可以使用AutoIt的运行文件(或什么都文件)作为其全权证书的特定用户。

一个脚本,将运行使用用户privelages程序的样本。

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的可以在这里找到。 - >它使用被编译成可运行.exe文件一个.ua3格式。



Answer 11:

不要浪费你的时间,用这个命令行运行命令行管理员:

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


Answer 12:

我的解决办法,如果你不需要有.bat文件,是对批处理文件.exe文件,那么你就可以建立以管理员身份运行转换。



文章来源: Batch Script to Run as Administrator