【发布时间】:2016-09-24 18:55:44
【问题描述】:
所以,我遇到了每个人似乎都试图以管理员身份运行存储在网络驱动器上的批处理文件的常见问题。我已经搜索了互联网,并且有一些“解决方法”,但如果可以的话,我不确定如何应用它们。
实际任务: 批处理文件(我们称之为批处理 #1)将文件“mms.cfg”从网络驱动器(与批处理相同的目录)复制到 system32 和 syswow64。当然,这些文件夹受到保护,因此需要以管理员身份运行。但是,当您以管理员身份运行时,“管理员”帐户和批处理弹坑不存在映射的网络驱动器。
在这个特定的实例中,批次 #1 运行闪存的静默安装。之后,它需要将配置文件复制到上述受保护的文件夹以禁用其自动更新功能,因为我们的标准用户无法运行更新,否则闪存会唠叨他们(为什么 adobe 不能只添加一个开关到他们的安装程序关闭此功能?)。
我的尝试:我已经看到了在注册表中设置 EnableLinkedConnections=1 的解决方法,但是我需要将此批处理文件部署到网络上的多台 PC 并且无法更改该注册表关键在每一个。
我还尝试在以管理员身份运行后重新映射目录。同样,批处理弹坑,因为它是从映射的网络驱动器运行的,并且“管理员”不知道该驱动器存在,因此在我有机会映射驱动器之前崩溃(通过pushd 或其他)。
我不能简单地将批处理复制到本地 PC 以每次运行它:1) 它执行其他任务(启动两个安装程序),2) 批处理文件本身正在从另一个批次(表示为批次 #2)运行,该批次正在沿着软件更新列表向下运行并静默应用它们,3) 这是在我(域admin) 将登录到每台 PC 并运行批处理 #2 以更新一系列程序(域自动映射目录到更新,因此我导航到 I:\updates 并运行它)。
我希望的最终结果:基本上这归结为如何运行存储在具有管理权限的映射网络驱动器上的批处理?有没有办法在任何给定的联网机器上执行此操作,或者我是否需要将配置文件手动复制到要更新的每台 PC 的 system32 和 syswow64?
TLDR:以管理员身份运行存储在映射网络驱动器上的批处理,而不会崩溃。
如果我不清楚或需要提供更多信息,我会尽力回来查看。提前感谢您的帮助!
更新 - 因此,我能够通过 GPO 在域中的计算机上设置 EnableLinkedConnections=1。但是,我注意到另一个有趣的问题:当您右键单击并以管理员身份运行时,它运行良好。但是,当您仅运行脚本时,现在包含以下自动请求管理员权限的代码会失败。也许我只是缺少一些简单的东西?
再次感谢您的帮助!
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>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"
:--------------------------------------
【问题讨论】:
-
您可以使用 UNC 路径而不是映射的驱动器号吗?或者提升和映射所需的驱动器之前运行批次#2?我很困惑为什么只有这个更新需要管理员权限。您可能还想使用
psexec进行调查,而不必将远程桌面连接到每台计算机并手动启动更新。 -
驱动器由安全令牌映射。管理员有两个(普通和提升)。您需要以管理员身份进行映射才能为管理员提供映射驱动器。然而,映射驱动器是一个古老的兼容性问题。只需使用 UNC
\\server\sharename\folder\file.ext。另见wmic /node:computerlist.txt process call create "c:\someprogram.exe" -
@HarryJohnston & Noodles - 我不希望通过 UNC 路径访问,因为我必须在很多机器上执行此操作,并且已经将该目录映射为登录的一部分,这使得这很有用(也许我误解了你的问题?)。我正在做的是单独登录每台电脑,导航到并运行此脚本,并且真的不想每次都通过 UNC 导航。附带说明 - 我如何以管理员身份映射驱动器,尤其是。根据我目前的情况(通过映射驱动器访问的运行脚本 - 导航到“I:\updates”而不是“\\server\sharename\folder\updates”来运行 batch2.bat)?
标签: windows batch-file networking cmd flash