20

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

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

4

12 回答 12

15

无效的解决方案

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

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

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

有效的解决方案

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

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

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

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

于 2014-01-08T14:57:15.670 回答
13
@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`
于 2016-02-05T08:21:12.757 回答
8

以下是一种解决方法:

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

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

于 2017-06-30T12:51:12.737 回答
6

它可能使用语法:

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>
于 2013-02-01T05:42:11.773 回答
3

你有几个选择。

  1. 如果您只需要使用批处理文件和本机命令来执行此操作,请查看如何自动提升我的批处理文件,以便它在需要时请求 UAC 管理员权限?.

  2. 如果 3rd-party 实用程序是一个选项,您可以使用Elevate之类的工具。它是一个可执行文件,您可以使用要作为参数运行的程序来调用它。
    像这样: elevate net share ...

于 2013-02-01T13:27:42.263 回答
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 调用略有不同,出于某种原因,它绕过了空格问题。

于 2014-12-29T18:13:02.617 回答
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
于 2014-04-24T12:10:56.813 回答
1

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

How-To Geek 论坛制作一个批处理文件以管理员身份运行 cmd解决方案:

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

于 2014-01-05T21:01:44.563 回答
1

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

于 2018-12-13T11:45:59.503 回答
0

如果上述所有答案都不符合您的喜好,您可以使用 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 可以在这里找到。-> 它使用.ua3 格式,编译成可以运行的.exe 文件。

于 2014-06-18T07:31:19.210 回答
0

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

检查这篇文章没有 UAC rompt 的提升程序快捷方式

于 2013-05-12T20:03:29.940 回答
0

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

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
于 2018-06-03T11:47:39.730 回答