我在各种机器上安装了一个程序,需要手动更新。
我将所有更新的文件存储在服务器上的共享中,并编写了一个批处理文件,将这些文件复制到正确的本地目录(Program Files(x86))
我的计划是部署一个组策略,该策略将在RunOnce上执行此批处理文件,在用户首次登录时更新程序。
问题是要写入目录,我必须以管理员身份运行批处理文件。
如何使用RunOnce执行此操作?还有另外一种方法吗?
我尝试过使用RoboCopy,但只是获得“拒绝访问”和同样的问题。
以下是我的批处理文件代码。
IF EXIST "C:\Program Files (x86)\NetHelpDesk\\." (goto CopyNetHelp) else Goto ExitLoop
:CopyNetHelp
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\nethdclient.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\NetHelpDeskClientUpdater.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\nhescalatorclient.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
:ExitLoop
Exit
答案 0 :(得分:1)
试试这个:
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (GOTO askAdmin)
GOTO gotAdmin
:askAdmin
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: batch is being ran as admin
:skipAdmin
IF EXIST "C:\Program Files (x86)\NetHelpDesk\\." (goto CopyNetHelp) else Goto ExitLoop
:CopyNetHelp
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\nethdclient.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\NetHelpDeskClientUpdater.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\nhescalatorclient.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
:ExitLoop
Exit
答案 1 :(得分:0)
只是为了将来的搜索,这就是我开始工作的方式。 我创建了一个新的批处理文件。这将是从RunOnce运行的那个。 如果需要,这只是将“真实”批处理文件复制到用户文档文件夹中。然后它从文档文件夹中调用该批处理文件,从而在本地运行它来解决问题。
Dennis发布的“真实”批处理文件然后运行,一旦完成,就从文档文件夹中删除自己。
复制批次
IF EXIST "C:\Program Files (x86)\NetHelpDesk\\." (goto CopyNetHelp) else Goto ExitLoop
:CopyNetHelp
copy "\\server\data\pc_support\UpdateNetHelpAdmin.bat" "%USERPROFILE%\Documents" /y
"%USERPROFILE%\Documents\UpdateNetHelpAdmin.bat"
:ExitLoop
Exit
“真实”批处理文件
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (GOTO askAdmin)
GOTO gotAdmin
:askAdmin
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: batch is being ran as admin
:skipAdmin
IF EXIST "C:\Program Files (x86)\NetHelpDesk\\." (goto CopyNetHelp) else Goto ExitLoop
:CopyNetHelp
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\nethdclient.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\NetHelpDeskClientUpdater.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
COPY "\\server\programs\Nethelpdesk\NetHelpUpgrade\NhEscalatorClient.exe" "C:\Program Files (x86)\NetHelpDesk\" /y
del "%USERPROFILE%\Documents\UpdateNetHelpAdmin.bat" /q
:ExitLoop
del "%USERPROFILE%\Documents\UpdateNetHelpAdmin.bat" /q
Exit