Script pour mettre à jour Firefox [Powershell] [RESOLU] - Shell/Batch - Programmation
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 ?
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
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. |
A lire, ça m'a l'air compliqué
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
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é.
Marsh Posté le 08-05-2022 à 23:24:24
slr56 a écrit : |
Sisi ça marche très bien
Code :
|
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. Si tu avais eu que "99.0" alors ça aurait été un polynôme en x² 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 |
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 .
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)
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
Marsh Posté le 09-05-2022 à 09:29:54
Merci à tous les 2, mais lorsque je fais ceci, ça fonctionne :
Code :
|
Et là, ça ne marche pas
Code :
|
Idem avec var2=100.1.1
Marsh Posté le 09-05-2022 à 09:46:55
I'l ne manquerait pas des guillemets autour des deux assignations ?
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.
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
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...
Code :
|
Je@nb a écrit : Tu récupères quoi comme type ? |
des strings :
Code :
|
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 :
|
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
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 ?
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