Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1072 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2416538
slr56
Tout problème a sa solution.
Posté le 04-05-2022 à 14:17:48  profilanswer
 

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
mood
Publicité
Posté le 04-05-2022 à 14:17:48  profilanswer
 

n°2416559
slr56
Tout problème a sa solution.
Posté le 04-05-2022 à 15:24:50  profilanswer
 

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
n°2416560
rufo
Pas me confondre avec Lycos!
Posté le 04-05-2022 à 15:28:33  profilanswer
 

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
n°2416563
slr56
Tout problème a sa solution.
Posté le 04-05-2022 à 15:51:47  profilanswer
 

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
n°2416595
rufo
Pas me confondre avec Lycos!
Posté le 04-05-2022 à 19:16:44  profilanswer
 

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
n°2416828
Je@nb
Kindly give dime
Posté le 08-05-2022 à 23:24:24  profilanswer
 

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

n°2416837
TotalRecal​l
Posté le 09-05-2022 à 07:21:48  profilanswer
 

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
n°2416843
rufo
Pas me confondre avec Lycos!
Posté le 09-05-2022 à 09:28:36  profilanswer
 

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
n°2416844
slr56
Tout problème a sa solution.
Posté le 09-05-2022 à 09:29:54  profilanswer
 

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
n°2416847
TotalRecal​l
Posté le 09-05-2022 à 09:46:55  profilanswer
 

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


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
mood
Publicité
Posté le 09-05-2022 à 09:46:55  profilanswer
 

n°2416848
slr56
Tout problème a sa solution.
Posté le 09-05-2022 à 10:02:24  profilanswer
 

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
n°2416852
Je@nb
Kindly give dime
Posté le 09-05-2022 à 10:26:17  profilanswer
 

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

n°2416880
slr56
Tout problème a sa solution.
Posté le 09-05-2022 à 14:38:14  profilanswer
 

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:  
 
 

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



---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
n°2416881
Je@nb
Kindly give dime
Posté le 09-05-2022 à 15:01:13  profilanswer
 

Tu récupères quoi comme type ?

n°2416882
slr56
Tout problème a sa solution.
Posté le 09-05-2022 à 15:09:59  profilanswer
 

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
n°2416902
mechkurt
Posté le 09-05-2022 à 17:44:50  profilanswer
 

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
n°2417513
slr56
Tout problème a sa solution.
Posté le 16-05-2022 à 14:51:54  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
[Powershell] [RESOLU] Lire caractères à partir du 17eme d'une chaine[PowerShell] Script SFTP avec authentification par clé de f
Création d'un .bat ou script PowerShell pour partage de dossiers.Script CSV en JSON
idée app du jour - stationnement, gène et signalisation<img src="... .php"> ne fonctionne plus dans Firefox
Exclure script du preloader[Powershell] Variable objet en paramètre de fonction & ValidateSet
Plus de sujets relatifs à : [Powershell] [RESOLU] Script pour mettre à jour Firefox


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR