fix(installation): un poste ne s'installait pas depuis une console ordinaire - #52
Merged
Merged
Conversation
…dinaire bootstrap.ps1 declare [switch]$Relaunched et ecrivait, quarante lignes plus bas, $relaunched = Join-Path $env:TEMP '...'. Les noms de variables PowerShell sont insensibles a la casse : ces deux-la sont la meme, et celle d'un parametre est typee. Le chemin range dans une [switch] levait, et $ErrorActionPreference = 'Stop' faisait ressortir l'erreur attribuee a l'Invoke-Expression appelant -- au caractere 96 du one-liner, sans nommer ni le fichier, ni la ligne, ni la variable. La ligne vit dans la branche d'auto-elevation, qui ne s'execute que dans une console NON elevee. Une installation lancee depuis une fenetre administrateur la saute entierement, ce qui explique qu'elle ait ete livree. Signale sur le forum des supermarches cooperatifs, capture a l'appui, et reproduit au banc avant d'etre touche : le script reel passe a iex dans une console non elevee rend l'erreur signalee au message, a la categorie et a l'identifiant pres. Troisieme defaut de la famille du 01/08/2026, dans une troisieme forme. Le garde-fou la ferme au lieu de fermer le cas : TestNoLocalVariableCollidesWithAParameterByCaseAlone refuse, dans tous les .ps1 du depot, une affectation a un nom qui ne differe d'un parametre declare que par la casse. La regle porte sur la casse et non sur le fait d'affecter un parametre, parce que ce depot en affecte expres. Il suit les portees : une premiere version en comptait quinze dont quatorze faux, un parametre d'une fonction contre une variable de trois autres. Il a trouve une seconde collision reelle, dans make.ps1, ou $version ecrasait le parametre -Version au lieu de le completer -- sans lever, une chaine entrant dans une [string], mais en effacant ce que l'operateur avait demande.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Le signalement
Sur le forum des supermarchés coopératifs, capture à l''appui : bannière affichée, puis
Le caractère 96 est exactement le premier caractère de
iexdans la commande publiée — donc la position n''accusait ni le fichier, ni la ligne, ni la variable.La cause
bootstrap.ps1déclare[switch]$Relaunchedet écrivait, quarante lignes plus bas :Les noms de variables PowerShell sont insensibles à la casse : ces deux-là sont la même variable, et celle d''un paramètre est typée. Un chemin rangé dans une
[switch]lève.$ErrorActionPreference = ''Stop'', posé trois lignes après leparam, transformait l''erreur en terminating et la faisait ressortir attribuée à l''Invoke-Expressionappelant.Pourquoi c''est passé en livraison : la ligne vit dans la branche d''auto-élévation, qui ne s''exécute que dans une console non élevée. Une installation lancée depuis une fenêtre administrateur la saute entièrement.
C''est le troisième défaut de la famille du 01/08/2026, dans une troisième forme.
Le garde-fou
TestNoLocalVariableCollidesWithAParameterByCaseAlonerefuse, dans tous les.ps1du dépôt, une affectation à un nom qui ne diffère d''un paramètre déclaré que par la casse.La règle porte sur la casse et non sur le fait d''affecter un paramètre, parce que ce dépôt en affecte exprès :
$AccountPasswordreçoit ce qui vient d''être tapé,$Pilots''allume sur une réponse. Ceux-là écrivent le nom qu''ils ont déclaré ; une casse qui diverge est quelqu''un qui croit ouvrir une variable neuve.Il suit les portées. Une première version comptait 15 signalements dont 14 faux — un
-Directoryd''une fonction contre un$directoryde trois autres, qui sont quatre portées et pas une collision.if,foreachettryn''ouvrent pas de portée, ce qui est précisément par où le défaut est passé.Il a trouvé une seconde collision réelle, dans
make.ps1:$version = Or-Else $Version …écrasait le paramètre-Versionau lieu de le compléter — sans lever, une chaîne entrant dans une[string], mais en effaçant ce que l''opérateur avait demandé.Vérifications
iexdans une console non élevée,Invoke-WebRequestetStart-Processbouchonnés, rend l''erreur du forum au message, à la catégorie et à l''identifiant près.common.ps1, attribuée à la bonne fonction.go vetetgofmtsans remarque.Ce qui n''est PAS prouvé
Aucun poste n''a été installé pour de bon : le banc s''arrête à l''appel d''élévation, et tout ce qui suit — release, empreinte, les trois questions,
install.ps1— reste non exercé sur ce chemin.Le test lit les scripts par un découpage de texte et non par l''analyseur de PowerShell : il neutralise les chaînes d''une ligne, pas les here-strings. Celui de
common.ps1ne le trompe pas, son corps étant équilibré en accolades, mais par chance et non par construction.