????# gov_publish_scripts_to_nas_v1.0.ps1 # Publie un set de scripts locaux -> NAS\scripts (PS 5.1-safe, TXT only) param( [string]$Root="\\DS-918\chatgpt\ChatGPT-Gouvernance-Projets\_registry", [switch]$Preview, [switch]$Execute ) function NowIso { (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssK") } function Ensure-Dir([string]$p){ if(-not (Test-Path -LiteralPath $p)){ New-Item -ItemType Directory -Path $p -Force | Out-Null } } function Sha([string]$p){ (Get-FileHash -LiteralPath $p -Algorithm SHA256).Hash.ToLower() } $nasScripts = Join-Path $Root "scripts" Ensure-Dir $nasScripts # Liste minimale utile (ajoute ici si besoin) $localDir = "C:\Temp_Gouvernance" $names = @( "gov_publish_scripts_to_nas_v1.0.ps1", "gov_pipeline_guard_v1.2.ps1", "kb_compare_lite_v1.1.ps1", "gov_pipeline_guard_v1.1.ps1", "kb_bulk_ingest_v1.3.ps1", "kb_ascii_scrub_v1.0.ps1", "kb_emit_bootpack_dual_v1.1.ps1", "kb_acceptance_tests_v1.0.ps1", "kb_quicklog_and_sync_v1.3.ps1", "kb_emit_final_report_v1.0.ps1", "kb_bug_intake_gate_v1.6.ps1" ) Write-Host "== PUBLISH SCRIPTS v1.0 ==" Write-Host ("NAS scripts dir : " + $nasScripts) $toCopy = @() foreach($n in $names){ $src = Join-Path $localDir $n $dst = Join-Path $nasScripts $n $srcOk = Test-Path -LiteralPath $src $dstOk = Test-Path -LiteralPath $dst $action = "SKIP" if($srcOk){ if(-not $dstOk){ $action = "COPY(new)" } else { $s = Sha $src $d = Sha $dst if($s -ne $d){ $action = "COPY(update)" } } } else { $action = "MISS(local)" } Write-Host (" - {0} action={1} local={2} dst={3}" -f $n,$action,$srcOk,$dstOk) if($action -like "COPY*"){ $toCopy += ,@($src,$dst) } } Write-Host ("ToCopy count: " + $toCopy.Count) if($Preview){ Write-Host "No write performed (Preview)." exit 0 } # Execute foreach($pair in $toCopy){ $s = $pair[0]; $d = $pair[1] Ensure-Dir (Split-Path -Parent $d) Copy-Item -LiteralPath $s -Destination $d -Force } # Manifest $ts = (Get-Date).ToString("yyyyMMdd_HHmmss") $manifest = Join-Path $nasScripts ("scripts_manifest_" + $ts + ".txt") Set-Content -LiteralPath $manifest -Value @( "Generated: " + (NowIso), "Root: " + $Root, "Count: " + $names.Count ) -Encoding Ascii Write-Host ("[OK] Published to NAS: " + $nasScripts + " (manifest: " + $manifest + ")")