I am trying to write a batch file for my users to run from their Vista machines with UAC. The file is re-writing their hosts file, so it needs to be run with Administrator permissions. I need to be able to send them an email with a link to the .bat file. The desired behavior is that when they right-click on the file and say Open, they will get one of those UAC dialogs that makes the screen go dark and forces them to answer whether they want to give the application permission to run as administrator. Instead, they are just seeing "Access denied" on the command line window.

有可能采取不同的做法吗?


当前回答

你不能从批处理文件中请求管理权限,但是你可以在%temp%中编写一个windows脚本主机脚本并运行它(它反过来以管理员身份执行你的批处理)。使用“runas”作为动词的应用程序对象

其他回答

@echo off 
Net session >nul 2>&1 || (PowerShell start -verb runas '%~0' &exit /b)
Echo Administrative privileges have been got. & pause

上述操作适用于我的Windows 10 1903版

使用runas命令。但是,我不认为您可以轻松地通过电子邮件发送.bat文件。

你不能从批处理文件中请求管理权限,但是你可以在%temp%中编写一个windows脚本主机脚本并运行它(它反过来以管理员身份执行你的批处理)。使用“runas”作为动词的应用程序对象

这个脚本很有用!只需将其粘贴到bat文件的顶部。如果您想查看脚本的输出,请在批处理文件的底部添加“pause”命令。

更新:这个脚本现在稍微编辑了一下,以支持命令行参数和64位操作系统。

感谢能源@ https://sites.google.com/site/eneerge/scripts/batchgotadmin

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    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

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------    
    <YOUR BATCH SCRIPT HERE>

我知道这不是OP的解决方案,但是因为我确信这里还有许多其他用例,所以我想分享一下。

我对这些答案中的所有代码示例都有问题,但后来我发现: http://www.robotronic.de/runasspcEn.html

它不仅允许您以管理员身份运行,还可以检查文件以确保它没有被篡改,并安全地存储所需的信息。我承认它不是最明显的工具,但对于我们这些编写代码的人来说,它应该足够简单。