# gov_publish_scripts_to_nas_v1.1.ps1 # Publie TOUS les .ps1 locaux correspondant aux patterns -> NAS\scripts $(if($null -ne (# PS 5.1-safe ; pas de ?:$(if(ni){ . /)){ # PS 5.1-safe ; pas de ? } else { ni ?. / } else { 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" $localDir = "C:\Temp_Gouvernance" $patterns = @("gov_*.ps1","kb_*.ps1") # auto-discovery ici Ensure-Dir $nasScripts # Collecte des fichiers locaux ? publier (uniquement *.ps1) $localNames = @() foreach($pat in $patterns){ $files = Get-ChildItem -LiteralPath $localDir -Filter $pat -File -ErrorAction SilentlyContinue foreach($f in $files){ $localNames += $f.Name } } $localNames = $localNames | Sort-Object -Unique Write-Host "== PUBLISH SCRIPTS v1.1 ==" Write-Host ("NAS scripts dir : " + $nasScripts) if($localNames.Count -eq 0){ Write-Host "[WARN] Aucun .ps1 local correspondant aux patterns." } $toCopy = @() foreach($n in $localNames){ $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 } 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: " + $localNames.Count, "Patterns: " + ($patterns -join ", ") ) -Encoding Ascii Write-Host ("[OK] Published to NAS: " + $nasScripts + " (manifest: " + $manifest + ")")