【发布时间】:2013-01-16 09:04:57
【问题描述】:
我正在编写一个客户端/服务器检查程序,但它需要以管理员身份运行。
我希望它在我的网络和用户上静默运行,并且我不希望“以管理员身份运行”提示。是否有任何开始代码可以放入批处理文件中以使其自动运行管理员?
【问题讨论】:
标签: batch-file administrator runas
我正在编写一个客户端/服务器检查程序,但它需要以管理员身份运行。
我希望它在我的网络和用户上静默运行,并且我不希望“以管理员身份运行”提示。是否有任何开始代码可以放入批处理文件中以使其自动运行管理员?
【问题讨论】:
标签: batch-file administrator runas
我的解决方案,如果你不需要 .bat 文件,将批处理文件转换为 .exe 文件,然后你将能够设置以管理员身份运行。
【讨论】:
不要浪费你的时间,使用这一行命令以管理员身份运行命令行:
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
【讨论】:
否: - 创建快捷方式 [ -> 兼容性 -> “以管理员身份运行此程序” ] 解决方案不起作用。
此选项在 Windows 7 中显示为灰色。即使禁用了 UAC
否:runas /env /user:domain\Administrator <program.exe/command you want to execute> 也不够用,因为它会提示用户输入管理员密码。
是:禁用 UAC -> 使用任务调度程序创建作业,这对我有用。
如果您愿意,您可以通过编辑注册表让脚本随后启用 UAC。在我的情况下,该脚本仅通过创建 Windows 虚拟机运行一次,其中 UAC 在映像中被禁用。
仍然期待以管理员身份运行脚本而没有太多麻烦的最佳方法。
【讨论】:
由于到目前为止我还没有找到任何简单的脚本,这是我的两分钱:
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
【讨论】:
以下是一种解决方法:
运行快捷方式将以管理员身份执行您的批处理脚本。
【讨论】:
@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`
【讨论】:
创建快捷方式并将快捷方式设置为始终以管理员身份运行。
How-To Geek 论坛Make a batch file to run cmd as administrator 解决方案:
在编辑器中创建一个批处理文件并命名it.bat,然后为其创建一个快捷方式。 Nameit.bat - 快捷方式。然后右键单击 Nameit.bat - 快捷方式 -> 属性 -> 快捷方式选项卡 -> 高级,然后单击以管理员身份运行。从快捷方式执行它。
【讨论】:
我对 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 调用,这出于某种原因规避了空格问题。
【讨论】:
如果上述所有答案都不符合您的喜好,您可以使用 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文件。
【讨论】:
您可以将其作为启动项...启动项根本不会显示以管理员身份运行的提示。
【讨论】:
你有几个选择。
如果您只需要使用批处理文件和本机命令,请查看How can I auto-elevate my batch file, so that it requests from UAC admin rights if required?。
如果可以选择第三方实用程序,您可以使用Elevate 之类的工具。它是一个可执行文件,您可以将要运行的程序作为参数调用。
像这样:
elevate net share ...。
【讨论】:
可以使用语法:
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>
【讨论】: