Patcher CU Windows 11 : installe le cumulatif d octobre 2026 (correctif des bugs de septembre) avant sa proposition par Windows Update. No-op si le poste est deja a jour.
  • C# 55.1%
  • PowerShell 44.9%
Find a file
2026-11-02 09:32:52 +01:00
app fix: extraction URL .msu (regex stricte + validation HEAD) + option --check — v1.1.0 2026-11-02 09:12:57 +01:00
tools tools: script de resignage Authenticode + certificat public .cer (déploiement GPO) 2026-11-01 19:57:21 +01:00
.gitignore WinCU Patcher v1.0.0 : installe le CU d'octobre 2026 avant Windows Update 2026-11-01 19:56:01 +01:00
Patch-WinOct2026.ps1 fix: extraction URL .msu (regex stricte + validation HEAD) + option --check — v1.1.0 2026-11-02 09:12:57 +01:00
README.md README : lien release corrige v1.0.1 -> v1.1.0 (aligne sur la version embarquee dans les exes) 2026-11-02 09:32:52 +01:00

Patcheur Windows 11 — Cumulatif Octobre 2026

Installe le cumulatif (CU) d'octobre 2026 directement depuis le Catalog Microsoft Update, sans attendre que Windows Update le propose au poste (déploiement échelonné, anneau en attente, policy de différé). Si le poste dispose déjà de la mise à jour (ou d'un CU plus récent), il ne fait rien et sort avec le code 0.

Versions livrées

Les exécutables ne sont PAS dans l'arbre git : ils sont dans la release Forgejo (v1.1.0) : https://git.emitlinks.com/emitlinks/win-cu-patcher/releases/tag/v1.1.0

Fichier (release v1.1.0) Description
WinCUPatcher-x64.exe Exécutable autonome x64 (~12 Mo, runtime .NET embarqué, aucune dépendance)
WinCUPatcher-arm64.exe Idem pour postes ARM64
EmitLinks-Internal-Tools.cer Certificat de signature (à déployer via GPO, voir plus bas)

Dans le dépôt :

Fichier Description
Patch-WinOct2026.ps1 Version PowerShell équivalente (référence, logique identique)
app\ Code source C# (dotnet publish, voir plus bas)
tools\sign.ps1 Relance la signature après chaque rebuild
tools\EmitLinks-Internal-Tools.cer Copie publique du certificat de signature

SHA-256 des exes signés (v1.1.0, 2026-11-02) :

  • x64 : 7da225d88b2374996106a0aae45f904300258028cfeafde70e64959de217b51e
  • arm64 : 3f98afd206db0d8da3b9ede2fad0d81437025d11c2ada23992c0b8b5f2777475

v1.1.0 : corrige l'extraction de l'URL de téléchargement (la regex gloutonne capturait le script JS du dialog catalogue → URL invalide → 404 du CDN). Ajoute une validation HEAD de l'URL avant téléchargement et l'option --check (vérifie l'URL sans rien télécharger). La release v1.0.0 est supprimée (binaires défectueux) ; le tag v1.0.1, créé par erreur en décalage avec la version embarquée dans les exes (1.1.0), a été renommé v1.1.0.

Ce qu'il fait

  1. Détecte le poste : build (22621 / 23H2, 24H2, 25H2, 26H2...), UBR, arch x64/arm64.
  2. Cherche sur catalog.update.microsoft.com le CU 2026-10 Cumulative Update for Windows 11 (classique ou Preview) le plus récent pour CE build.
  3. Ne fait RIEN si le poste est déjà à jour :
    • UBR installé >= UBR cible, ou
    • un paquet CBS Package_for_RollupFix de la plateforme atteint déjà l'UBR cible (couvre le CU installé ET le CU staged en attente de redémarrage — Get-HotFix est peu fiable pour un CU staged), ou
    • un CU plus récent est déjà présent (le KB forcé est alors superseedé).
  4. Sinon : télécharge le .msu (avec progression) et installe en silencieux (wusa /quiet /norestart).

Pour 26H2 (build 26300), la chaîne d'octobre 2026 est :

  • KB5127648 (26300.9711) — CU du 13/10
  • KB5134133 (26300.9725) — CU OOB du 26/10 (corrige les bugs de septembre)
  • KB5127936 (26300.9818) — CU Preview du 28/10 (cible par défaut, la plus récente)

Prérequis

  • Exécutable autonome : rien à installer sur le poste cible (runtime .NET embarqué).
  • L'exe porte un manifeste requireAdministrator : l'UAC s'ouvre au double-clic ; en déploiement distant (WinRM/SCCM/Intune en contexte SYSTEM) il n'y a rien à faire.
  • Accès sortants : catalog.update.microsoft.com et *.dl.delivery.mp.microsoft.com (le .msu du CU 26H2 x64 fait ~4,9 Go).

Utilisation

# Analyse sans rien installer
.\WinCUPatcher-x64.exe --dry-run

# Patch réel (KB le plus récent d'octobre pour le build du poste)
.\WinCUPatcher-x64.exe

# Forcer un KB précis
.\WinCUPatcher-x64.exe --kb KB5134133

# Vérifier l'URL de téléchargement du CU cible (HEAD, sans rien télécharger)
.\WinCUPatcher-x64.exe --check

# Autre mois (le patcheur est réutilisable chaque mois)
.\WinCUPatcher-x64.exe --month 2026-11

Codes de sortie (scriptable / supervision)

Code Signification
0 Déjà à jour (aucune action) ou KB déjà staged
3010 Installé, redémarrage requis
1 Erreur (détails dans le log)

Log : logs\patch-cu-<horodatage>.log à côté de l'exe.

Déploiement multi-postes

WinRM (copie de l'exe puis exécution) :

Invoke-Command -ComputerName (Get-Content postes.txt) -ScriptBlock {
    Copy-Item '\\serveur\partage\WinCUPatcher-x64.exe' 'C:\Windows\Temp\' -Force
    & 'C:\Windows\Temp\WinCUPatcher-x64.exe' --dry-run
}

PsExec (si WinRM désactivé) :

psexec @postes.txt -h -s \\serveur\partage\WinCUPatcher-x64.exe

GPO / Intune : déploiement applicatif silencieux, surveiller le code de sortie 3010 pour déclencher un redémarrage planifié.

Antivirus / SmartScreen — politique de signature

L'exe est un binaire .NET natif propre : pas de packer, pas d'obfuscation, pas de wrapper PS2EXE (les exes PS2EXE sont systématiquement détectés comme HackTool — c'est justement ce qu'on évite). Métadonnées complètes (Produit : "Windows CU Patcher", Société : EmitLinks). Il est signé Authenticode (SHA-256 + horodatage) avec le certificat interne CN=EmitLinks Internal Tools (valable 5 ans, relançable via dist\sign.ps1).

Pour que la signature soit reconnue comme valide sur les postes du parc, déployer le certificat par GPO :

  1. dist\EmitLinks-Internal-Tools.cer → Configuration ordinateur → Paramètres Windows → Paramètres de sécurité → Stratégies de clés publiques : ajouter le .cer dans "Autorités de certification racines de confiance" ET "Editeurs tiers approuvés".
  2. Get-AuthenticodeSignature passe alors de UnknownError à Valid sur tous les postes.

Si un AV signale quand même le binaire (faux positif), la voie propre est l'allow-list, pas l'obfuscation :

  • Defender : exclusions par GPO (chemin d'installation stable, ex. C:\Tools\WinCUPatcher\) ou allow-list par SHA-256 via Microsoft Defender for Endpoint (Indicateurs de compromission → application autorisée).
  • Consigner les SHA-256 ci-dessus dans l'inventaire des outils approuvés.

Rebuild

cd app
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true `
  -p:PublishTrimmed=true -p:IncludeAllContentForSelfExtract=true `
  -p:EnableCompressionInSingleFile=true
# puis dist\sign.ps1

Notes

  • Le CU s'installe par wusa ; un redémarrage est nécessaire pour finaliser.
  • Si Windows Update est en train d'installer quoi que ce soit, wusa renvoie 1618 : le patcheur sort en erreur et il suffit de relancer plus tard.
  • Relancer le patcheur après le redémarrage confirme "DEJA A JOUR" (UBR à jour).
  • Le build interne CBS peut différer du CurrentBuildNumber affiché (26100 vs 26300 sur ce poste) : la comparaison se fait sur l'UBR.