以管理员身份运行的批处理脚本

时间:2013-02-01 04:29:11

标签: batch-file administrator runas

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

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

12 个答案:

答案 0 :(得分:14)

无效的解决方案

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

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

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

有效的解决方案

是:停用UAC - &gt;使用任务计划程序创建一个作业,这对我有用。

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

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

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

答案 1 :(得分:11)

Layout

答案 2 :(得分:4)

可能使用语法:

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>

答案 3 :(得分:4)

以下是解决方法:

  1. 创建.bat文件的快捷方式
  2. 打开快捷方式的属性。在快捷方式选项卡下,点击高级
  3. 勾选&#34;以管理员身份运行&#34;
  4. 运行快捷方式将以管理员身份执行批处理脚本。

答案 4 :(得分:3)

你有两个选择。

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

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

答案 5 :(得分:1)

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

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

  

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

我对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调用,这会因某种原因绕过空格问题。

答案 8 :(得分:0)

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

查看此文章Elevated Program Shortcut Without UAC rompt

答案 9 :(得分:0)

如果以上所有答案都不符合您的喜好,您可以使用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 can be found here. - &gt;它使用.ua3格式编译为可以运行的.exe文件。

答案 10 :(得分:0)

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

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

如果您想以管理员权限启动任何应用程序,您只需在我的程序文件中编写此应用程序的漏洞路径,例如notepad ++,例如:

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

答案 11 :(得分:0)

如果您不需要.bat文件,我的解决方案是将批处理文件转换为.exe文件,然后您就可以将运行设置为admin。