[Powershell] [RESOLU] Script pour mettre à jour Firefox

Script pour mettre à jour Firefox [Powershell] [RESOLU] - Shell/Batch - Programmation

Marsh Posté le 04-05-2022 à 14:17:48    

Bonjour,
 
J'ai un script Powershell qui force la mise à jour de Firefox sur les postes de travail. Il fonctionnait bien... jusqu'à ce que Mozilla sorte la v100 il y a 2 jours...
 
En effet, en faisant un test ce matin, je m'aperçois que la version "99.0.1" installée sur le poste est considérée comme supérieure à la nouvelle version "100" selon le script. La condition du IF n'est plus satisfaite et donc la v100 ne s'installe pas. Je me demande si ce n'est pas un problème de type de données. Auriez-vous une idée ?
 

Code :
  1. $FIREFOXVERSION=@(Get-Item 'c:\program files\Mozilla Firefox\Firefox.exe').VersionInfo.FileVersion
  2.     Start-Sleep -s 2
  3.         $FFJSON = Invoke-WebRequest  "https://product-details.mozilla.org/1.0/firefox_versions.json" | ConvertFrom-Json
  4.         $FFLASTVERSION= $FFJSON.LATEST_FIREFOX_VERSION
  5.             If ($FIREFOXVERSION -lt $FFLASTVERSION) {  Désinstallation de la version courante, installation de la nouvelle version}


 
Cdt,
 
slr56


Message édité par slr56 le 16-05-2022 à 14:52:10

---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le 04-05-2022 à 14:17:48   

Reply

Marsh Posté le 04-05-2022 à 15:24:50    

Je vois que mes 2 variables $FIREFOXVERSION et $FFLASTVERSION sont de type "string". Quel type dois-je utiliser pour que le script interprète correctement le "." dans les chaines ?


---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le 04-05-2022 à 15:28:33    

Il doit probablement comparer des chaînes et donc, pour lui, "99.0.1" est > à 100.
 
Pour être sûr que ton script marche toujours, il faudrait que tu comptes le nb de "." dans les 2 versions puis tu garde le nb max. Donc ton cas, l'une des 2 versions a 2 ".". Tu pourrais utiliser un polynôme pour calculer en valeur entière plutôt que string ta version.
2 "." --> polynôme en x3
"99.0.1" devient 99^3 + 0^2 + 1
"100" devient 100^3
 
Si tu avais eu que "99.0" alors ça aurait été un polynôme en x²
"99.0" devient 99² + 0
"100" devient 100²
 
Ainsi, quand tu va comparer le résultat de ces 2 calculs, tu auras toujours la bonne version prise en compte.
 
Ca va compliquer un peu ton script mais ça devrait réduire grandement les pbs de version pendant un bon bout de temps. ;)
 
A noter que le passage en v100 de FF était annoncé depuis un petit moment et qu'ils avaient prévenus que ça pourrait poser des soucis de calcul de version :o
 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-05-2022 à 15:51:47    

rufo a écrit :

Il doit probablement comparer des chaînes et donc, pour lui, "99.0.1" est > à 100.
 
Pour être sûr que ton script marche toujours, il faudrait que tu comptes le nb de "." dans les 2 versions puis tu garde le nb max. Donc ton cas, l'une des 2 versions a 2 ".". Tu pourrais utiliser un polynôme pour calculer en valeur entière plutôt que string ta version.
2 "." --> polynôme en x3
"99.0.1" devient 99^3 + 0^2 + 1
"100" devient 100^3
 
Si tu avais eu que "99.0" alors ça aurait été un polynôme en x²
"99.0" devient 99² + 0
"100" devient 100²
 
Ainsi, quand tu va comparer le résultat de ces 2 calculs, tu auras toujours la bonne version prise en compte.
 
Ca va compliquer un peu ton script mais ça devrait réduire grandement les pbs de version pendant un bon bout de temps. ;)
 
A noter que le passage en v100 de FF était annoncé depuis un petit moment et qu'ils avaient prévenus que ça pourrait poser des soucis de calcul de version :o
 


 
A lire, ça m'a l'air compliqué  :pt1cable:  
 
Je viens de voir que le type System.Version permet de lire ce genre de nombre. Ca fonctionne avec X.Y mais ça ne fonctionne pas avec X.Y.Z :(


---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le 04-05-2022 à 19:16:44    

Le nb de "." max dans les 2 versions te donne l'exposant max de ton polynôme en faisant nb+1
2 "." --> polynôme en x^3
1 "." --> polynôme en x²
Rien de bien compliqué. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-05-2022 à 23:24:24    

slr56 a écrit :


 
A lire, ça m'a l'air compliqué  :pt1cable:  
 
Je viens de voir que le type System.Version permet de lire ce genre de nombre. Ca fonctionne avec X.Y mais ça ne fonctionne pas avec X.Y.Z :(


 
Sisi ça marche très bien

Code :
  1. [version]"100.0.0" -gt [version]"99.1.0"
  2. True

Reply

Marsh Posté le 09-05-2022 à 07:21:48    

rufo a écrit :

Il doit probablement comparer des chaînes et donc, pour lui, "99.0.1" est > à 100.

 

Pour être sûr que ton script marche toujours, il faudrait que tu comptes le nb de "." dans les 2 versions puis tu garde le nb max. Donc ton cas, l'une des 2 versions a 2 ".". Tu pourrais utiliser un polynôme pour calculer en valeur entière plutôt que string ta version.
2 "." --> polynôme en x3
"99.0.1" devient 99^3 + 0^2 + 1
"100" devient 100^3

 

Si tu avais eu que "99.0" alors ça aurait été un polynôme en x²
"99.0" devient 99² + 0
"100" devient 100²

 

Ainsi, quand tu va comparer le résultat de ces 2 calculs, tu auras toujours la bonne version prise en compte.

 

Ca va compliquer un peu ton script mais ça devrait réduire grandement les pbs de version pendant un bon bout de temps. ;)

 

A noter que le passage en v100 de FF était annoncé depuis un petit moment et qu'ils avaient prévenus que ça pourrait poser des soucis de calcul de version :o

 



Je suis peut être mal réveillé mais ton machin à polynôme en plus d'être alambiqué me parait susceptible de raconter des conneries si tu compares 99.0.1 à 100.0 par exemple. Je ne vois pas du tout le bénéfice de toute l'opération en fait. Ou alors j'ai mal compris, ce qui est très possible.

 

Pour proposer un algo j'aurais juste dit qu'il suffit de splitter sur les "." et comparer les nombres en partant du plus à gauche [:fing fang fung].

 

Mais en l'occurrence [System.Version]::Parse() me semble totalement fait pour toi.
edit : Et il va jusqu'à 4 éléments (majeur / mineur / revision / build, classique chez MS)


Message édité par TotalRecall le 09-05-2022 à 07:24:09

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 09-05-2022 à 09:28:36    

Oui, effectivement, il peut y avoir des cas où ça marche pas dans le cas de versions X.Y.Z où Y serait très > à X.
Mon algo était aussi parti sur le split des "." mais effectivement, comparer 2 à 2 les valeurs 2 à 2 suffit :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-05-2022 à 09:29:54    

Merci à tous les 2, mais lorsque je fais ceci, ça fonctionne :

 
Code :
  1. $var1 = 99.0.1
  2. $var2 = 100.1
  3. if ([version]$var1 -lt [version]$var2) {Write-Host "inférieur"}


Et là, ça ne marche pas

Code :
  1. $var1 = 99.0.1
  2. $var2 = 100.1.0
  3. if ([version]$var1 -lt [version]$var2) {Write-Host "inférieur"}
 

Idem avec var2=100.1.1


Message édité par slr56 le 09-05-2022 à 09:31:21

---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le 09-05-2022 à 09:46:55    

I'l ne manquerait pas des guillemets autour des deux assignations ?


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 09-05-2022 à 09:46:55   

Reply

Marsh Posté le 09-05-2022 à 10:02:24    

TotalRecall a écrit :

I'l ne manquerait pas des guillemets autour des deux assignations ?

 

Ca à l'air de marcher avec les guillemets effectivement !
Je vais faire un rewrite de la version installée de Firefox avec les guillemets et je vais faire un test grandeur nature. Merci pour l'info TotalRecall.


Message édité par slr56 le 09-05-2022 à 10:06:15

---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le 09-05-2022 à 10:26:17    

Pas besoin de "rajouter des guillemets", ce qu'il faut c'est que tes variables soient des strings. La dans ton premier exemple tu avais un float

Reply

Marsh Posté le 09-05-2022 à 14:38:14    

Je@nb a écrit :

Pas besoin de "rajouter des guillemets", ce qu'il faut c'est que tes variables soient des strings. La dans ton premier exemple tu avais un float


 
 
Ca me rend dingue ce problème.
 
Mes variables sont des strings. Mais lorsqu'une valeur est égale à 99.0 par exemple, j'ai une erreur comme quoi il est impossible de convertir la valeur "99" en type "System.Version". Erreur « La portion de la chaîne version était trop courte ou trop longue. »
Au caractère Ligne:1 : 5
+ If ([version]$FIREFOXVERSION -lt [version]$FFLASTVERSION) {Write-Host ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastParseTargetInvocation
 
Si j'ai $FFLASTVERSION=100.0 et $FIREFOXVERSION=99.0.1,  ça fonctionne et si j'ai $FIREFOXVERSION=99.0 (tout court), ça plante car la chaine est trop courte...  :kaola:  
 
 

Reply

Marsh Posté le 09-05-2022 à 15:01:13    

Tu récupères quoi comme type ?

Reply

Marsh Posté le 09-05-2022 à 15:09:59    

Code :
  1. If ([version]$FIREFOXVERSION -lt [version]$FFLASTVERSION) {Write-Host "inférieur"}
Je@nb a écrit :

Tu récupères quoi comme type ?


 
des strings :
 

Code :
  1. $FIREFOXVERSION.GetType()
  2. IsPublic IsSerial Name                                     BaseType                                                                                                                 
  3. -------- -------- ----                                     --------                                                                                                                 
  4. True     True     String                                   System.Object                                                                                                           
  5. $FFLASTVERSION.GetType()
  6. IsPublic IsSerial Name                                     BaseType                                                                                                                 
  7. -------- -------- ----                                     --------                                                                                                                 
  8. True     True     String                                   System.Object


---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le 09-05-2022 à 17:44:50    

Et rajouter un .0 à la fin de ta chaine de caractère quand elle est trop courte ?
 
Peut-être qu'il croit avoir affaire à un float ?


---------------
D3
Reply

Marsh Posté le 16-05-2022 à 14:51:54    

Bonjour,

 

J'ai trouvé une solution simple et rapide à mon script. Dans la mesure ou, je veux que l'utilisateur ait toujours la dernière release de Firefox, je ne cherche plus à savoir si la version installée est égale ou inférieure à celle sur le FTP mais seulement si elle est différente. Si elle est différente, je fais la mise à jour :

 
Code :
  1. If ($FIREFOXVERSION -ne $FFLASTVERSION) {  Désinstallation de la version courante, installation de la nouvelle version}
 

Donc je n'ai pas besoin de m'embêter à comparer les valeurs et les types de données.

 

Vous allez peut être trouver ça un peu brut, mais j'ai le résultat attendu. :)

 

Merci pour votre aide tout de même.

 

cdt,

 

slr56


Message édité par slr56 le 16-05-2022 à 14:57:32

---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Sujets relatifs:

Leave a Replay

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