# verify_lot3_hashes_v1.0.ps1 param( [string]$Root="\\DS-918\chatgpt\ChatGPT-Gouvernance-Projets\_registry", [string]$InDir="C:\GovDrop\incoming\lot3" ) function Sha([string]$p){ if(Test-Path -LiteralPath $p){ (Get-FileHash -LiteralPath $p -Algorithm SHA256).Hash.ToUpper() } else { "" } } function Head3([string]$p){ if(-not (Test-Path -LiteralPath $p)){ return "" } $b = Get-Content -LiteralPath $p -Encoding Byte -TotalCount 3; ($b | ForEach-Object { '{0:X2}' -f $_ }) -join '' } $Expected = @{ "ensure_aliases_and_shims_v1.0.ps1" = "DBEAB4931D6A1A8CE45D88AB7AA4C6212A110E430EF94A754D2465D8AED2F994" "governance_autofix_wiring_v1.0.ps1" = "CC75BB26EF25D6466C73D19D8B26446D8AB73387B5C9F927CFBFF1B3B826DBED" "gov_dev_coach_v1.0.1.ps1" = "093A0D1DAF23B7036C8869B8E5B5AD581E4AB4571B70D82BE5837CE45070543B" "gov_pipeline_guard_v1.2.6.ps1" = "BEF2EEEBB29C269FCB6B923EB146DF669595C5F41E5C9B0BCB37C30DC07E1DC6" "gov_precommit_audit_v1.0.ps1" = "BFF9B82ED5A1526FE16649489E8F50BC4C8772AEB3F15467A7093F5EAC4BD1FD" "gov_profile_launcher_v1.10.ps1" = "B52D43E5AE2A923AEC0A013C658A023EBB5E82B24EDCCC767B8CDE54E5F90BF5" "gov_profile_launcher_v1.8.1.ps1" = "26B35B954DECB01F225C3128C269C86A0CAA2B6B7BDCB3968B43A2BC773B60B1" "gov_profile_launcher_v1.8.2.ps1" = "26B35B954DECB01F225C3128C269C86A0CAA2B6B7BDCB3968B43A2BC773B60B1" "gov_profile_launcher_v1.9.ps1" = "DE66CBD6B39A25AEC419F1CF6216A5D641FD72D078213E85F04CAE460300C16B" "gov_publish_scripts_to_nas_v1.1.ps1" = "7B176592F82EA646F9D3EC807A705E0A1FDEC2BDB7B3271A9F8C2C8C9730EEAA" "install_latest_aliases_v1.1.ps1" = "6AA91ED07F32753D58F47521F637560AF83D2140B9F030295BBCEF63DFF093CC" "install_latest_aliases_v1.2.ps1" = "C1B229BD5566E629AE199F66D435F4CE4AC40E7F8785BDACF6E992F58F0D120B" "install_latest_aliases_v1.3.ps1" = "F616CB8E9DF27969675F6735DADEBB6B8F9C62AE01FFFEE15C531474DC5A20C9" "kb_bulk_ingest_v1.3.ps1" = "CD640AD272EEA892989BD2AE1142DA93DE0FD3EA07A03AC71244B108448F0CFC" "kb_salvage_strict_rescue_v1.0.ps1" = "657E44550284001C33B8A27C28690D4EE2C93602CA7AC36B8E0BA1A59E91C39A" "post_bootpack_pointer_refresh_v1.0.2.ps1" = "0EECB9A99F06BF1DFB2C3BEB87468C8EE6664B7827B835F2C8CD5E8E43AB8B76" "rebuild_bootpack_full_hub_v1.1.ps1" = "06A6649C5784D9AC1736148479C8F2B4563FA3B2DAB5080958CE0D1F76A0A8C7" "rebuild_bootpack_full_seedbox_v1.1.ps1" = "F3F86F2180F027C51C9856D7E1E2257E4DABB5E2F444666448A0FDBE88C8FB35" "scripts_baseline_dashboard_v1.0.1.ps1" = "F7B4D83486F953D57DC143762A2F4AF4C4EAB95C54FF96775277B3CBDA92BD7A" "scripts_baseline_dashboard_v1.0.2.ps1" = "016027433CD3D69ADB26075753A76E1321EB5489A0263B1139DFB5CC5A305F2D" "scripts_baseline_dashboard_v1.0.3.ps1" = "83CEC4331E1F24A537B501323F72D9C7D572FB136571AD3D6A984DCB5953E1B0" "text_encoding_guard_v1.2.ps1" = "FED46ADCBFEBE91597829D143F4CCAE0D5C48742AD48A220D7260ABAAF141DD1" "text_encoding_guard_v1.3.3.ps1" = "AF0574B2785D9DB950B1DFAA855CA23248F936BB5270DAB5107382304C0521A4" "thread_bootstrap_check_v1.0.ps1" = "765BB8C25E3BFE97390AD39D33FD8CA6DC67FFB85C4344075EBDDBDEDA376BDC" "writer_posthook_runner_v1.1.ps1" = "088B11E00D8C6A6A8AE9B50BD62124C51A72D36A54E419AE45973B55EA9673E8" "writer_posthook_runner_v1.2.1.ps1" = "4FAA9FFB445F2B11B1A3EFF80F36E8D3D86021742EE7AE71BD0685BE5ADFECC6" "writer_posthook_runner_v1.2.ps1" = "C2D26F2A34DB92670BA37B118DA9F1156B00B1CF9BC219A00B798C62C676EED7" "write_devlock_debugkit_rule_v1.0.ps1" = "8C7C853712143435566D6ABC2C56487C624F15FCB840AC85A8AFF46C53714526" } $ok=0; $nok=0 Write-Host "== LOCAL vs EXPECTED ==" foreach($rel in $Expected.Keys){ $local = Join-Path -Path (Join-Path -Path $InDir -ChildPath "") -ChildPath $rel $shaL = Sha $local $exp = $Expected[$rel] $st = if($shaL -eq $exp){"OK"}else{"NOK"} if($st -eq "OK"){$ok++}else{$nok++} Write-Host ("LOCAL {0} | {1}" -f $rel, $st) if($rel -like "*.ps1"){ Write-Host (" BOM={0}" -f (Head3 $local)) } if($st -ne "OK"){ Write-Host (" exp={0}`n got={1}" -f $exp, $shaL) } } Write-Host "== NAS vs LOCAL ==" foreach($rel in $Expected.Keys){ $local = Join-Path -Path (Join-Path -Path $InDir -ChildPath "") -ChildPath $rel $dst = Join-Path -Path (Join-Path -Path $Root -ChildPath "") -ChildPath $rel $shaL = Sha $local $shaD = Sha $dst $st = if($shaL -ne "" -and $shaL -eq $shaD){"OK"}else{"NOK"} if($st -eq "OK"){$ok++}else{$nok++} Write-Host ("NAS {0} | {1}" -f $rel, $st) if($rel -like "*.ps1"){ Write-Host (" BOM(NAS)={0}" -f (Head3 $dst)) } if($st -ne "OK"){ Write-Host (" local={0}`n nas={1}" -f $shaL, $shaD) } } Write-Host ("== RESULTAT == OK={0} NOK={1}" -f $ok, $nok); exit ([int]([bool]($nok -gt 0)))