- C# 55.1%
- PowerShell 44.9%
| app | ||
| tools | ||
| .gitignore | ||
| Patch-WinOct2026.ps1 | ||
| README.md | ||
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
- Détecte le poste : build (22621 / 23H2, 24H2, 25H2, 26H2...), UBR, arch x64/arm64.
- 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. - Ne fait RIEN si le poste est déjà à jour :
- UBR installé >= UBR cible, ou
- un paquet CBS
Package_for_RollupFixde 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é).
- 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 :
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".Get-AuthenticodeSignaturepasse 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.