Script pour Vérifier la version d'un .exe
Résolubarnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
bonjour
je cherche à créer un batch d'installation de programme sur postes clients via GPO.
Mes étapes sont les suivantes : vérifier si l'.exe existe déjà, s'il existe vérifier sa version pour savoir s'il faut ou pas installer une autre version, sinon installer la version demandée
Voici comment se présente mon script pour VEYON par ex, qui pour l'instant ne fonctionne pas :
if exist "%programfiles%\veyon\veyon-cli.exe" goto CHECK else goto CONTINUE
:CHECK
for /f "usebackq delims=" %%a in ('"wmic datafile where name='c:\\program files\\veyon\\veyon-cli.exe' get version /format:Textvaluelist"') do set "%version%"
)
if "%version%" eq "4.7.3.0" goto END else goto CONTINUE
:CONTINUE
"%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json
"%programfiles%\veyon\veyon-cli.exe" authkeys import master/public %~dp0master_public_key.pem
"%programfiles%\veyon\veyon-cli.exe" authkeys import master/private %~dp0master_private_key.pem
:END
exit
- Script pour Vérifier la version d'un .exe
- Dernière version ccleaner gratuit français - Télécharger - Nettoyage
- Splitcam ancienne version - Télécharger - Messagerie
- .Exe - Télécharger - Divers Utilitaires
- Svchost exe - Guide
- Script vidéo youtube - Guide
4 réponses
Bonjour,
Personnellement j'aurais fait plutôt comme ça :
@echo off set "app=%programfiles%\veyon\veyon-cli.exe" if not exist "%app%" (exit /b 1) call :CHECK "4.7.3.0" || ( "%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json "%app%" authkeys import master/public %~dp0master_public_key.pem "%app%" authkeys import master/private %~dp0master_private_key.pem ) pause exit :CHECK set "version=" for /f "skip=2 delims=" %%A in ('"wmic datafile where name='%app:\=\\%' get version /format:list"') do if not defined version set %%A ) echo Version installée : %version% if "%version%"==%1 (exit /b 0) else (exit /b 1)
merci beaucoup. cette methode marche bien en effet c'est une autre manière d'y arriver et c'est plus épuré !!
Voici ce que j'avais conçu en m'inspirant d'autres forum qui consiste à appeler des commandes pour changer \ en \\ puis chercher la version de l'appli et enfin la comparer à ce que je veux installer.
@echo off
Set "Application=C:\Program Files\veyon\veyon-cli.exe"
Call :Add_backSlash "%Application%"
Call :GetVersion %Application% Version
echo La version de l'application est : %Version%
if "%Version%" EQU "4.7.3.0" goto END else goto CONTINUE
:CONTINUE
"\\srv-dc1\applications$\veyon\veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=\\srv-dc1\applications$\veyon\configuration_pceleve.json
"C:\Program Files\veyon\veyon-cli.exe" authkeys import master/public \\srv-dc1\applications$\veyon\master_public_key.pem
"C:\Program Files\veyon\veyon-cli.exe" authkeys import master/private \\srv-dc1\applications$\veyon\master_private_key.pem
exit
:END
exit
:GetVersion <ApplicationPath> <Version>
FOR /F "tokens=2 delims==" %%I IN (
'wmic datafile where "name='%~1'" get version /format:Textvaluelist'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
:Add_backSlash <String>
Set "Application=%1"
Set "String=\"
Set "NewString=\\"
Call Set "Application=%%Application:%String%=%NewString%%%"
Exit /b
salut. En fait je me rend compte que le script proposé ne se lance pas. N'y a t il pas une erreur dans les commande? le pause suivi de exit est il normal? et la parenthèse ligne 19?
j'avais cru que c'était ok ce format condensé mais là il fonctionne plus et je suis pas sur de comprendre ce qu'il fait.
if not exist %app% (exit /b 1) >> pourquoi quitter le script si le logiciel n'existe pas. il faudrait plutôt lancer les commandes d'installation dans ce ca, non?
Pourquoi y a til un call :CHECK et un :CHECK ? Quelle difference entre les 2?
merci
Le "pause" suivi du "exit" n'est pas nécessaire, il est utile uniquement lors des tests.
Effectivement c'est un oubli de ma part, le "if not exist" devrait lancer les commandes d'installation.
:CHECK est une fonction et call :CHECK c'est l'appel à la fonction
.
Si je corrige vite fait mon code ça devrait donner quelque chose comme ça :
@echo off set "app=%programfiles%\veyon\veyon-cli.exe" if not exist "%app%" (call :INSTALL) call :CHECK "4.7.3.0" || call :INSTALL exit :CHECK set "version=" for /f "skip=2 delims=" %%A in ('"wmic datafile where name='%app:\=\\%' get version /format:list"') do if not defined version set %%A echo Version installée : %version% if "%version%"==%1 (exit /b 0) else (exit /b 1) :INSTALL "%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json "%app%" authkeys import master/public %~dp0master_public_key.pem "%app%" authkeys import master/private %~dp0master_private_key.pem goto :eof
cela fonctionne bien désormais , c'est nickel merci. Juste pour etre sur, ce batch ne prend pas en compte la hierarchie des versions c'est bien ça? C'est a dire que si dans mon check j'indique une version 2.1.3 mais que sur le poste il ya une version plus récente type 2.2.0, alors il va rétrograder vers la version indiquée = 2.1.3. Et bien sur idem si la version est plus ancienne.
J'ai en effet plusieurs programme à installer via GPO, quelle est ta méthode dans cette situation? Car pour l'instant je fais 1GPO par logiciel, c'est à la fois pas pratique mais ca peut aussi etre utile pour les classer
Non ce batch ne prend pas en compte la hiérarchie des versions.
.
Voilà une autre version plus pointue qui permet d'installer plusieurs applications (3 en l'occurrence mais on peut en rajouter autant qu'on veut) et qui prend en compte la version la plus récente :
@echo off setlocal enableextensions enabledelayedexpansion ver | find "10.0." >nul && chcp 65001 >nul || chcp 28591 >nul color 0A : ------------------------------------------------------------------------------------------------------------------------- : on définit les exécutables et les versions : ------------------------------------------------------------------------------------------------------------------------- set "App1=C:\Windows\System32\7za.exe#22.1.0.0" set "App2=%ProgramFiles%\VideoLAN\VLC\vlc.exe#3.0.17.4" set "App3=%ProgramFiles%\PuTTY\putty.exe#0.77.0.0" : ------------------------------------------------------------------------------------------------------------------------- : on traite les exécutables un par un : ------------------------------------------------------------------------------------------------------------------------- for /L %%A in (1,1,100) do ( if defined App%%A ( for /f "tokens=1,2 delims=#" %%E in ("!App%%A!") do ( echo. & echo ############# %%E if not exist "%%~E" (call :installApp%%A) call :check "%%~E" "%%F" && call :installApp%%A ) ) ) echo. & pause exit : ------------------------------------------------------------------------------------------------------------------------- : on vérifie si l'exécutable a besoin d'une mise à niveau : ------------------------------------------------------------------------------------------------------------------------- :check set "versionInstallee=" set "application=%~1" for /f "skip=2 tokens=2 delims=^=" %%A in ('"wmic datafile where name='%application:\=\\%' get version /format:list"') do ( if not defined versionInstallee set "versionInstallee=%%A" ) echo. echo Version installée : !versionInstallee! echo Dernière version : %~2 set "versionDisponible=%~2" set "versionDisponible=!versionDisponible:.= !" call :parsing !versionDisponible! || exit /b 1 echo. echo ^>^>^>^>^> Une mise à niveau est requise ^<^<^<^<^< echo. exit /b 0 : ------------------------------------------------------------------------------------------------------------------------- : on découpe le numéro de version en plusieurs digits : ------------------------------------------------------------------------------------------------------------------------- :parsing set /a index=0 for %%A in (%*) do ( set /a index+=1 set /a digitVD=%%A call :compare !versionInstallee:.= ! && exit /b 0 ) exit /b 1 : ------------------------------------------------------------------------------------------------------------------------- : on compare un digit avec un autre : ------------------------------------------------------------------------------------------------------------------------- :compare for /L %%A in (1,1,!index!) do if %%A GTR 1 (shift) if "%1"=="" (exit /b 0) if !digitVD! GTR %1 (exit /b 0) else (exit /b 1) : ------------------------------------------------------------------------------------------------------------------------- : on procède à la mise à niveau de l'exécutable concerné : ------------------------------------------------------------------------------------------------------------------------- :installApp1 "%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json "%%E" authkeys import master/public %~dp0master_public_key.pem "%%E" authkeys import master/private %~dp0master_private_key.pem goto :eof :installApp2 echo Installation de App2 goto :eof :installApp3 echo Installation de App3 goto :eof