????param( [Parameter(Mandatory=$true)][string]$Base, [Parameter(ValueFromRemainingArguments=$true)][string[]]$PassThruArgs ) try { [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding } catch {} $scriptPath = $MyInvocation.MyCommand.Definition $scriptDir = Split-Path -Parent $scriptPath $registry = Split-Path -Parent $scriptDir $dirScripts = Join-Path $registry 'scripts' function gv([string]$n){ $m=[regex]::Match($n,'_v([0-9]+(?:\.[0-9]+)*)$'); if($m.Success){ try { return [version]$m.Groups[1].Value } catch { return [version]'0.0' } } return [version]'0.0' } # 0) pick latest writer $pattern = $Base + '_v*.ps1' $writers = Get-ChildItem -LiteralPath $dirScripts -Filter $pattern -File -EA SilentlyContinue if(-not $writers){ Write-Host "[ERR] Aucun writer ne correspond a $pattern"; exit 1 } $best = $writers | Sort-Object @{Expression={ gv $_.BaseName };Descending=$true}, @{Expression={$_.LastWriteTime};Descending=$true} | Select-Object -First 1 # 1) run writer & 'powershell.exe' -NoProfile -ExecutionPolicy Bypass -File $best.FullName @PassThruArgs 2>&1 | Write-Host $exitWriter = $LASTEXITCODE # 2) post-hook only if -Write present $doWrite = ($PassThruArgs -contains '-Write') if($doWrite){ $encPs1 = Join-Path $dirScripts 'text_encoding_guard_v1.3.4.ps1' if(Test-Path $encPs1){ Write-Host "POST-HOOK: encoding guard (All -Write, manifest recalc off)..." & 'powershell.exe' -NoProfile -ExecutionPolicy Bypass -File $encPs1 -Scope All -Write | Out-Null Write-Host "POST-HOOK: encoding report (All -Preview)..." & 'powershell.exe' -NoProfile -ExecutionPolicy Bypass -File $encPs1 -Scope All -Preview | Out-Null } else { Write-Host "[WARN] text_encoding_guard_v1.3.4.ps1 introuvable." } $lint = Join-Path $dirScripts 'ps_script_linter_v1.0.ps1' if(Test-Path $lint){ Write-Host "POST-HOOK: PS script linter..." # exclure le linter lui-meme pour eviter faux positifs $files = Get-ChildItem -LiteralPath $dirScripts -Filter '*.ps1' -File -EA SilentlyContinue | Where-Object { $_.FullName -ne $lint } | ForEach-Object { $_.FullName } & 'powershell.exe' -NoProfile -ExecutionPolicy Bypass -File $lint -Files $files -SummaryOnly $lintExit=$LASTEXITCODE if($lintExit -ne 0){ Write-Host "[BLOCK] Lint a detecte des anomalies dans scripts\\*.ps1 (voir log). Commit refuse." exit 2 } } else { Write-Host "[WARN] ps_script_linter_v1.0.ps1 introuvable." } } exit $exitWriter