You are here

BAT скрипты для обновления программ с определением версий


BAT скрипты для обновления программ с определением версий

Привет. Сегодня покажу вам 2 bat скрипта, которые могут сильно облегчить жизнь, если вам в домене необходимо обновлять программное обеспечение через GPO. В моих примерах обновляются Java и Chrome, но по аналогии можно переделать для практически любых программ.

Не вижу смысла что то расписывать по этим скриптам, они довольно просты. В комментариях я указал на основные моменты, которые там происходят. Как всегда доступны они в ]]>github]]>, если что.

И так, текст скрипта для обновления Java:

@echo off
set installedVersion=180144
setlocal
setlocal enabledelayedexpansion
rem Путь до актуальной версии Java
set jPath=\Java\jre1.8.0_144\bin\java.exe

rem Определяем установленную версию Java
PATH %PATH%;%JAVA_HOME%\bin\
set jver=
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
echo %jver%| findstr /r "[^0-9]" > nul
if errorlevel 1 goto :checkVersion


set javaPath=C:\Program Files%jPath%
set jver=
for /f tokens^=2-5^ delims^=.-_^" %%j in ('"%javaPath%" -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
echo %jver%| findstr /r "[^0-9]" > nul
if errorlevel 1 goto :checkVersion


set javaPath=C:\Program Files (x86)%jPath%
set jver=
for /f tokens^=2-5^ delims^=.-_^" %%j in ('"%javaPath%" -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
echo %jver%| findstr /r "[^0-9]" > nul
if errorlevel 1 goto :checkVersion


echo %date% %time% - cannot check java version. Installing actual version... on %computername%
goto :JavaInstall

:checkVersion
rem Если версия ниже чем та, которая нам нужна - устанавливаем новую версию
if %jver% LSS %installedVersion% (
echo version is slower. Current version is %jver%.
echo Installing new Java version...
goto :JavaInstall
)

echo JavaVersion is actual. Copying config files...
echo %date% %time% - java version is actual for %username% on %computername%
goto :CopyConfigs



:JavaInstall

msiexec.exe /i "jre-8u144-windows-i586.msi" /qn /norestart


:copyConfigs
set jPath=C:\program files (x86)\java\jre1.8.0_144
rem определяем, куда установлена Java
dir /A /B "C:\program files\java\jre1.8.0_144\bin\" | findstr /R ".">NUL && set jPath=C:\program files\java\jre1.8.0_144
dir /A /B "C:\program files (x86)\java\jre1.8.0_144\bin\" | findstr /R ".">NUL && set jPath=C:\program files (x86)\java\jre1.8.0_144
echo java install path %jPath%
mkdir c:\Windows\Sun\Java\Deployment
mkdir c:\Windows\java

rem копируем конфиги Java
copy "%~dp0cacerts" "%jpath%\lib\security\" /y
copy "%~dp0DeploymentRuleSet.jar" "c:\windows\sun\java\deployment\" /y
copy "%~dp0deployment.properties" "c:\windows\sun\java\deployment\" /y
copy "%~dp0deployment.config" "c:\windows\sun\java\deployment\" /y
copy "%~dp0exception.sites" "c:\windows\sun\java\deployment\" /y
:EXIT
echo exiting script
exit

И для хрома:

@echo off
setlocal
setlocal enabledelayedexpansion
rem Ищем путь до хрома
for /f "usebackq tokens=3*" %%a in (`reg query "HKLM\software\microsoft\Windows\CurrentVersion\App Paths\chrome.exe" /s`) do (
  if defined %%a do (
        if defined %%b do (
            set _chrome_path=%%a %%b\chrome.exe
        )
    )
  )
if not defined _chrome_path (
echo %date% %time% - cannot fined path to chrome on %computername%
goto :INST_Chrome65
)
set _chrome_path=!_chrome_path:\=\\!
rem опеределяем установленную версию хрома
for /F "tokens=2 delims==." %%I IN (
    'wmic datafile where "name='%_chrome_path%'" get version /format:list'
    ) DO SET "version=%%I"
if not defined version (
echo %date% %time% - unable to check Chrome version on %computername%, installing...
goto :INST_Chrome65
)
rem если версия ниже, чем нужна нам, устанавливаем новую версию
if %version% LSS 65 (
echo %date% %time% - current Chrome version is %version% on %computername%
goto :INST_Chrome65
)

if %version% GEQ 65 (
echo chrome version is actual
echo %date% %time% - chrome version is actual for %username% on %computername%
goto :EXIT
)

:INST_Chrome65
echo %date% %time% - chrome is installing for %username% on %computername%

rem проверяем разрядность операционной системы и ставим нужную версию хрома
Set OS=64
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32 || set OS=64

If %OS%==64 (
    msiexec /i "chrom64(65).msi" /quiet /norestart
    goto :exit
)

 msiexec /i "chrom32(65).msi" /quiet /norestart


:exit
endlocal
exit

Как видите, скрипты очень похожи. Различия между ними только в методе опеределения версии и поиске пути до установленного приложения. В первом случае для Java мы используем встроенный ключ - java --fullversion c хромом же мы используем WMI для определения весии исполняемого файла. В определении пути, мы используем переменные среды для Java и реестр для хрома.

0 0

Share the article with your friends in social networks, maybe it will be useful to them.


If the article helped you, you can >>thank the author<<