1

Quelqu'un peut m'aider s'il vous plaît comprendre le code pour le fichier de commandes Windows qui va chercher les propriétés des exécutables ou des installateurs dans un répertoire, déterminer la version de l'installateur et le nom du produit, les stocker dans les variables, et interroger les produits installés agaist dans le registre? L'idée est que je voudrais copier les mises à jour dans un dossier sur une machine qui n'a pas de connexion Internet à partir du disque. De là, je voudrais exécuter un fichier batch qui regarde la version et le nom du logiciel, les stocke dans des variables, puis interroge le registre pour voir si une version précédente est installée. Donc, si j'avais téléchargé install_flash_player_ax.exe, il devrait savoir regarder dans le registre pour adobe flashplayer. Si la version sur l'exécutable est plus récente que la version dans le registre, elle ferait une installation silencieuse.Automatiser les mises à jour logicielles du lot

Toute aide ou suggestion serait grandement appréciée!

Répondre

0

Bien que ce soit une vieille question, j'essaierai d'y répondre, car cela peut être utile pour les autres. Le shell de commande Windows n'a pas un moyen direct d'obtenir des métadonnées de fichier comme la version, mais vous pouvez utiliser wmic pour cela. Le principal problème est que le nom d'affichage du logiciel peut être différent dans les propriétés du fichier d'installation/mise à jour exe et celui du registre. Donc, c'est une mauvaise idée de prendre le nom des métadonnées du fichier et d'en faire une requête dans toute la ruche du registre HKLM. Aussi, si vous n'avez pas une liste prédéfinie du logiciel à mettre à jour et ne connaissez pas le chemin exact dans le registre où la version pour chacun d'eux est stockée, l'idée de boucler contre la liste d'exe pour obtenir des noms de leur l'identifiant des métadonnées est également mauvais. Donc, la meilleure façon de rechercher cela est de créer un script pour chaque exe séparément et de les ajouter au planificateur Windows. Voici un exemple du script batch requis pour automatiser les mises à jour pour Adobe Flash Player pour OS 64 bits:

@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") 

fichier de mise à jour se trouve dans certains dossier local, dans mon cas C: \ Users \ nom d'utilisateur \ Téléchargements \ install_flash_player_19_active_x.exe. Lorsque les programmes sont installés, ils s'enregistrent dans HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ pour le système d'exploitation 64-bot et HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ pour 32 bits. Par conséquent, vous devez trouver le chemin pour chaque installation dont vous avez besoin. S'il vous plaît noter que {EE56217C-B3F9-402B-B4EC-63F090F51D3D} dans mon script est le GUID pour la version donnée de Flash Player 19.

Voici le même dans PowerShell qui est plus élégante:

$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" 
    } 
Questions connexes