[BATCH] Script de comparaison valeur de registre avec valeur en dur

Script de comparaison valeur de registre avec valeur en dur [BATCH] - Shell/Batch - Programmation

Marsh Posté le 30-01-2016 à 12:20:59    

:hello:  
 
J'ai beaucoup de postes en erreur dans mon parc suite à une GPO qui je pense, à corrompu les installations existantes de Silverlight.
 
Le symptôme c'est qu'aucune màj de Silverlight via le WSUS (ou autrement) ne passe sur ces postes qui affiche un code d'erreur 643. J'ai rien trouvé de mieux que de supprimer manuellement Silverlight sur ces machines (via un script trouvé sur le site de Microsoft) mais pour gagner du temps je voudrais le faire via une GPO, de plus tous ne sont pas impactés...
 
Les postes qui ont un Silverlight fonctionnel mais qu'on ne peut pas désinstaller / mettre à jour ont tous la même version : 5.1.40728.0.
 
J'ai donc essayé de faire ce script :
 

Code :
  1. @ECHO OFF
  2. SETLOCAL EnableDelayedExpansion
  3. FOR /F "tokens=3 delims=." %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Silverlight" /v "Version"') DO SET "Version=%%A"
  4. ECHO %Version%
  5. IF  (%Version%==40728) (
  6. REG DELETE "HKLM\Software\Microsoft\Silverlight" /f
  7. REG DELETE "HKEY_CLASSES_ROOT\Installer\Products\D7314F9862C648A4DB8BE2A5B47BE100" /f
  8. REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\D7314F9862C648A4DB8BE2A5B47BE100" /f
  9. REG DELETE "HKEY_CLASSES_ROOT\TypeLib\{283C8576-0726-4DBC-9609-3F855162009A}" /f
  10. REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\install.exe" /f
  11. REG DELETE "HKEY_CLASSES_ROOT\AgControl.AgControl" /f
  12. REG DELETE "HKEY_CLASSES_ROOT\AgControl.AgControl.5.1" /f
  13. REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{89F4137D-6C26-4A84-BDB8-2E5A4BB71E00}" /f
  14. RMDIR /s /q "%ProgramFiles%\Microsoft Silverlight"
  15. RMDIR /s /q "%ProgramFiles(x86)%\Microsoft Silverlight"
  16. ECHO.
  17. ECHO Installation of Silverlight 5.1.41212.0 ...
  18. silverlight.5.1.41212.0.exe /q /doNotRequireDRMPrompt /noupdate
  19. ECHO.
  20. ECHO Finish !
  21. ) ELSE (
  22. ECHO Installation OK !
  23. )
  24. PAUSE


 
NOTE : Les ECHO ne me serviront à rien une fois le script en place, on est d'accord, c'est juste pour m'aider à voir si les conditions sont remplies... :)
 
C'est le début du IF qui me chagrine et j'ai beau y réfléchir je trouve pas. L'idéale serai un comparateur inférieur ou égale à la place de == comme ça mon script prendrait aussi en compte les versions plus vieilles qui existent potentiellement, je ferais d'une pierre deux coup.
 
Ensuite je voudrais faire une GPO machine avec ce script qui sur le poste lira la clé de registre, puis en fonction du résultat déclenche la suppression manuelle suivi de la réinstallation de la nouvelle version. Pour le cas des postes OK, rien ne serai fait car déjà bon.
 
Merci pour votre aide :)


---------------
Topic Achat/Vente - Ancien Feed-back
Reply

Marsh Posté le 30-01-2016 à 12:20:59   

Reply

Marsh Posté le 30-01-2016 à 17:51:54    

L'aide intégrée du if (if /?) dit qu'il faut utiliser "LEQ".
 
Mon script de test qui fonctionne:

Code :
  1. @ECHO OFF
  2. SET Version=4
  3. ECHO %Version%
  4. IF %Version% LEQ 3 ( ECHO OUI ) ELSE ( ECHO NON )

Reply

Marsh Posté le 30-01-2016 à 21:04:29    

:jap: pour ta réponse...
 
C'est ce que je cherchais à faire sur mes premiers essais et j'ai jamais réussis à y faire fonctionner... Il n'a jamais voulu comparer...  
 
Je vais revoir ma syntaxe en plus de ta réponse !  
 
Je te tiens informé ;)
 
EDIT :  
 

rat de combat a écrit :

L'aide intégrée du if (if /?) dit qu'il faut utiliser "LEQ".
 
Mon script de test qui fonctionne:

Code :
  1. @ECHO OFF
  2. SET Version=4
  3. ECHO %Version%
  4. IF %Version% LEQ 3 ( ECHO OUI ) ELSE ( ECHO NON )



 
En m'inspirant de ton modèle j'ai finis par faire fonctionner mon script... :)
 

Code :
  1. @ECHO OFF
  2. SETLOCAL EnableDelayedExpansion
  3. SET BadVersion=40728
  4. ECHO %BadVersion%
  5. FOR /F "tokens=3 delims=." %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Silverlight" /v "Version"') DO SET "Version=%%A"
  6. ECHO %Version%
  7. IF %Version% LEQ %BadVersion% ( ECHO Uninstallation
  8. ) ELSE (
  9. ECHO NOK )
  10. PAUSE


 
Je vais faire des tests avec les vraies actions attendues mais je pense que ça va fonctionner comme ça... Comme ça il arrive à comparer deux valeurs contenues dans deux variables chacune. Avant cela ne devait pas lui plaire...
 
Un grand merci à toi :jap:


Message édité par Mad_noob le 04-02-2016 à 12:17:37

---------------
Topic Achat/Vente - Ancien Feed-back
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed