1

Может кто-нибудь, пожалуйста, помогите мне разобраться в коде для командного файла Windows, который будет искать свойства исполняемых файлов или инсталляторов в каталоге, определить версию установщика и имя продукта, сохранить их в переменных и запросить аггейст установленных продуктов в реестре? Идея состоит в том, что я хотел бы скопировать обновления в папку на компьютере, у которого нет подключения к интернету с диска. Оттуда я хотел бы выполнить пакетный файл, который рассматривает версию и имя программного обеспечения, сохраняет их в переменных, затем запрашивает реестр, чтобы узнать, установлена ​​ли предыдущая версия. Итак, если я скачал install_flash_player_ax.exe, он должен знать, чтобы посмотреть в реестр для Adobe Flashplayer. Если версия исполняемого файла более новая, чем версия в реестре, она будет делать тихую установку.Автоматизация обновлений программного обеспечения из пакета

Любая помощь или предложения были бы весьма признательны!

ответ

0

Хотя это старый вопрос, я постараюсь ответить на него, поскольку он может быть полезен для других. Командная оболочка Windows не имеет прямого способа получить метаданные файлов, например, но вы можете использовать wmic для нее. Основная проблема заключается в том, что отображаемое имя программного обеспечения может отличаться в свойствах файла exe-файла установки/обновления, а также от имени в реестре. Таким образом, это плохая идея, чтобы взять имя из метаданных файла и запросить его в целом в куче реестра HKLM. Кроме того, если у вас нет предопределенного списка программного обеспечения для обновления и не знаю точного пути в реестре, где хранится версия для каждого из них, идея зацикливаться на списке exe, чтобы получить имена от их Идентификатор метаданных также плохой.

Итак, лучший способ поиска - это сделать скрипт для каждого exe отдельно и добавить их в планировщик Windows. Вот пример необходимого пакетного сценария для автоматизации обновления для Adobe Flash Player для 64-битной ОС:

@echo off 
for /f %%a in ('wmic datafile where name^="C:\\Users\\username\\Downloads\\install_flash_player_19_active_x.exe" get version ^| find /n /v "" ^| findstr "^\[2\]"') do set var=%%a 
for /f "tokens=2 delims=]" %%a in ("%var%") do set prver=%%a 
echo Available version: %prver% 
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{EE56217C-B3F9-402B-B4EC-63F090F51D3D}" /v DisplayVersion') do set regversion=%%a 
echo Installed version: %regversion% 
if %prver% == %regversion% (echo The newest version %regversion% installed) else (echo Update required & "C:\Users\username\Downloads\install_flash_player_19_active_x.exe") 

файл обновления находится в некоторой локальной папке, в моем случае C: \ Users \ имя пользователя \ Загрузка \ install_flash_player_19_active_x.exe. Когда программы установлены, они регистрируются в HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ для 64-разрядной ОС и HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ для 32-разрядных.

Следовательно, вам необходимо найти путь для каждой установки, в которой вы нуждаетесь. Обратите внимание, что {EE56217C-B3F9-402B-B4EC-63F090F51D3D} в моем сценарии является GUID для данной версии Flash Player 19.

Вот то же самое в PowerShell, которая является более элегантна:

$filever = (Get-Item "C:\Users\username\Downloads\install_flash_player_19_active_x.exe").versioninfo.fileversion 
$appname = (Get-Item "C:\Users\username\Downloads\install_flash_player_19_active_x.exe").versioninfo.internalname 
$regpath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{EE56217C-B3F9-402B-B4EC-63F090F51D3D}" 
$regversion = Get-ItemProperty $regpath -Name "DisplayVersion" | select -ExpandProperty "DisplayVersion" 
if ($winrarreg -eq $regversion) { 
    "The newest version of Flash Player $regpath is already installed" 
    } else { 
     "Current installed version is:" + $regversion 
     "Available version is:" + $filever 
     "Let's update Flash Player" 
     Start-Process -FilePath "C:\Users\username\Downloads\install_flash_player_19_active_x.exe" 
    }