#Requires -Version 5.1 param([switch]$Liste, [string]$Capture, [switch]$Essai, [switch]$Vieux, [switch]$Amd, [string]$Depuis) # -Liste : le catalogue en texte, sans rien appliquer. -Capture dossier : chaque onglet en PNG, sans fenetre. -Essai : ouvre la fenetre invisible 1,5 s et note son etat. -Vieux : force l avertissement "installation pas recente". -Amd : simule une carte AMD dediee. -Depuis : dossier du clone (pose par la relance admin). # bagarre.ps1 : GENERE par build.ps1 a partir de src/ et textes/. Ne pas editer ce fichier, edite les sources. # UTF-8 SANS BOM : "irm" garde le BOM dans le texte et PowerShell le prend pour une commande. Pour le lancer en local : # & ([scriptblock]::Create([IO.File]::ReadAllText("bagarre.ps1", [Text.Encoding]::UTF8))) -Liste # --------------------------------------------------------------------------- # Garde-fou : le texte du script collé dans une console, au lieu de la ligne "irm | iex" (un ami l'a copié depuis le # lien ouvert dans son navigateur, 2026-10-23). La console exécute alors chaque ligne seule : un elseif en début de # ligne devient une commande inconnue, la langue reste vide et la fenêtre s'ouvre cassée. # Une ligne collée est seule sur la pile d'appels et son texte est court. "irm | iex" et un scriptblock ajoutent un # cadre, -File et un collage d'un seul bloc (Ctrl+V dans conhost, ISE) portent le script entier. # build.ps1 pose ce fichier juste après param, avant toute action : la relance admin partirait aussi en morceaux. # --------------------------------------------------------------------------- if ((Get-PSCallStack).Count -le 1 -and "$($MyInvocation.MyCommand.ScriptBlock)".Length -lt 20000) { $ligne = 'irm https://bagarre.mtsu.dev | iex' if (-not [Console]::IsInputRedirected) { # Le reste du collage attend en deux endroits : la file privée de PSReadLine, qui lit d'avance tout ce qui est # disponible (2.0.0, celui de Windows), et le tampon d'entrée de la console. On jette les deux jusqu'à 1,5 s # sans touche, sinon la ligne suivante du collage repart dès le retour au prompt. La file est affectée dans le # try et pas rendue par lui : rendue, PowerShell l'énumère et $file devient une copie qu'on ne vide jamais. $file = $null try { $bf = [Reflection.BindingFlags]'NonPublic, Static, Instance' $prl = 'Microsoft.PowerShell.PSConsoleReadLine' -as [type] $file = $prl.GetField('_queuedKeys', $bf).GetValue($prl.GetField('_singleton', $bf).GetValue($null)) } catch {} $calme = [Diagnostics.Stopwatch]::StartNew(); $total = [Diagnostics.Stopwatch]::StartNew() while ($calme.ElapsedMilliseconds -lt 1500 -and $total.Elapsed.TotalSeconds -lt 30) { if (($null -ne $file -and $file.Count) -or [Console]::KeyAvailable) { if ($null -ne $file) { $file.Clear() } $Host.UI.RawUI.FlushInputBuffer(); $calme.Restart() } else { Start-Sleep -Milliseconds 100 } } } # Le presse-papiers contient encore le script : un deuxième Ctrl+V referait la même erreur. tests\colle.ps1 pose # BAGARRE_TEST pour ne pas écraser celui du mainteneur. if (-not $env:BAGARRE_TEST) { try { Set-Clipboard $ligne } catch {} } Write-Host '' if ((Get-UICulture).TwoLetterISOLanguageName -eq 'fr') { Write-Host ' La console a reçu le script lui-même et le lance ligne par ligne, ce qui le casse.' -ForegroundColor Red Write-Host ' Colle seulement cette ligne, elle est déjà dans ton presse-papiers :' } else { Write-Host ' The console received the script itself and runs it line by line, which breaks it.' -ForegroundColor Red Write-Host ' Paste only this line, it is already in your clipboard:' } Write-Host " $ligne`n" -ForegroundColor Yellow # Script envoyé sur l'entrée standard ("irm | powershell") : rien à vider, on quitte avant la ligne suivante. if ([Console]::IsInputRedirected) { exit 1 } } $Textes = @{} $Textes['en'] = @{} $Textes['en']['accueil'] = @' This pack removes what runs for nothing on a fresh Windows 11 and sets what matters for gaming. Follow the steps in order. Every line of the script says what it changes and what you lose. If you do not understand a line, do not tick it. Everything the script changes is written to C:\ProgramData\bagarre. "Restore everything" puts exactly those values back. @BtnRestaurerAccueil, BtnJournalAccueil, BtnCommande '@ $Textes['en']['amd'] = @' Your card is an AMD. The driver comes from AMD's site and everything is set in Adrenalin, its panel. ## 1. The driver, from AMD's site @BtnAmd - Pick your card and take the latest "Recommended" driver. i@ Not the Auto-Detect tool, not Windows Update: one installs the full suite, the other an outdated driver. - In the installer: "Minimal install". i@ The driver and Adrenalin, nothing else. ! Do not tick "Factory reset" in the installer without a reason: it wipes your Adrenalin profiles. ## 2. Adrenalin: Gaming > Global settings - Radeon Anti-Lag: On. i@ Anti-Lag 2 per game when the game has it. - Radeon Boost, Radeon Chill, Image Sharpening: Off. i@ They change the rendering or the FPS behind your back. - AFMF (frame generation): never globally. i@ Per game, single-player only: in multiplayer the added latency is felt. - Shader cache: AMD optimized. i@ A game stutters after a driver update: "Reset shader cache", once. Leave the rest at default. i@ Enhanced Sync, FreeSync, V-Sync, texture filtering: screen by screen and game by game, never globally. ! On a Ryzen X3D, leave core parking alone: it is what keeps the game on the CCD with the cache. ## 3. What Adrenalin runs for nothing - Record and stream: Instant Replay OFF, Desktop recording OFF. - In-game overlay (Alt+R): OFF. i@ One overlay at a time: RivaTuner or Steam or Discord. - Preferences: "Open on startup" OFF, "Automatic updates" set to Notify only. @BtnAfterburner The RivaTuner overlay shows FPS and frame time. Without it, you will not know whether a tweak changes anything. '@ $Textes['en']['audit'] = @' The pack does not know your PC. The audit takes a snapshot of it and hands it to an AI, with a prompt that knows what the pack did, what it refuses, and how to judge a tweak. ## 1. The report @BtnCollecter Changes nothing. Writes rapport-pc.txt and AUDIT.txt into bagarre-audit on your Desktop, then copies the prompt to the clipboard. No account name, no password, no license key. Open the report anyway before sending it. @BtnPrompt, BtnDossierAudit ## 2. Your AI - Terminal agent (Claude Code, Codex, Gemini CLI): open it in the bagarre-audit folder and paste the prompt. It reads the report by itself. - Web chat (ChatGPT, Claude.ai): paste the prompt, then attach rapport-pc.txt. A proposal with no source or no downside, you do not apply. The AI does not touch your PC, you apply. '@ $Textes['en']['audit-prompt'] = @' You are a Windows 11 expert focused on gaming and latency, careful, who prefers one measurable tweak to ten forum tweaks. You are auditing a PC whose state is in the file rapport-pc.txt (next to this prompt, or attached to the message). Answer in the language of the person asking, informal, direct, no filler. If the report is missing, ask for it first. CONTEXT: WHAT THE PACK HAS ALREADY DONE This PC went through the "windows bagarre edition" pack (repo github.com/klNuno/windows-bagarre): - Fresh Windows 11, Windows Update current, chipset and network drivers from the manufacturer. - Win11Debloat (default mode) and WinUtil (Standard tweaks). - NVIDIA card: bare driver via NVCleanstall (no NVIDIA App, MSI High, HDCP off, Ansel off, signature rebuilt with the EAC compatible method). Classic Control Panel from the Store: Low Latency Mode On, unlimited shader cache, threaded optimization, RGB output full range. The rest at default, set per game when needed (power management, filtering, V-Sync, G-Sync). AMD card instead: driver from AMD's site in minimal install, Anti-Lag on, Boost/Chill/AFMF off, instant replay and the Adrenalin overlay off, the rest at default. - Checkbox script bagarre.ps1 (list taken from this PC's catalogue). Boxes ticked by default, applied if the user clicked Apply (the bagarre-avant.json section of the report says so): {{CASES_COCHEES}} Boxes unticked by default, to propose only with a reason specific to this PC: {{CASES_DECOCHEES}} - DNS tested from the PC (eight resolvers), the fastest applied if the gap with the router was over 5 ms, with a fallback, DNS over HTTPS encryption and IPv6 when the connection has it. DO NOT PROPOSE, IT IS DECIDED - Disabling HVCI / memory integrity, Secure Boot, Defender, the firewall, Windows Update, UAC. - Registry cleaners, paid "optimizers", scripts that make 200 changes at once. - BIOS settings: out of the pack's scope, only point them out. - "Ultimate performance" plan, prefetch/superfetch, "unlocking the 20% reserved bandwidth", LargeSystemCache, IRQ8Priority, mouse/keyboard data queues, TcpWindowSize, page file off, HPET, TdrLevel, IPv6 off, C-states off, Interrupt Moderation Disabled, a timer resolution tool running in the background, Win32PrioritySeparation (0x26 gives the same split as the client default), SvcHostSplitThreshold, RawMouseThrottleDuration. - Disabling a service you are not sure about: NvContainer, Windows Audio, Themes, Cryptographic Services, Windows Time, Storage Service, Device Install, WMI stay. - A global NVIDIA or AMD setting that belongs per game (max performance, filtering, V-Sync, Smooth Motion). YOUR MISSION, IN THIS ORDER 1. CHECK: for every point of the CONTEXT, DONE / NOT DONE / UNCERTAIN based on the report, with the report line that proves it. List what is missing with the script box or the pack step to redo. 2. WHAT IS WRONG: old drivers (compare the GPU and network driver dates to today), MSI missing on the GPU or the network card, useless startup programs, third-party services set to automatic (launchers, updaters, RGB), Store bloat still present, duplicate antivirus, repeated system errors (WHEA, disk, driver), drive almost full, HAGS or windowed optimizations inconsistent with the GPU, slow or ISP DNS. 3. TWEAKS SPECIFIC TO THIS BUILD, which the generic pack cannot know: - the exact CPU (E-cores / P-cores, X3D, laptop), the GPU, the network card (Realtek, Intel, Killer, Marvell) and what exactly to set for them; - the installed programs (Discord, launchers, RGB, overlays) and which ones cost in game; - the screen (Hz, G-Sync / FreeSync) and the consistency of V-Sync / FPS cap / low latency; - the RAM (sticks, advertised speed vs probable XMP): point it out only, no BIOS step. 4. FORMAT OF EVERY PROPOSAL, otherwise it is worthless: - What: the exact setting (registry key, command, menu), ready to apply. - Why: the mechanism in two sentences, not "it optimizes". - What you lose: the tradeoff, even a small one. "Nothing" is rarely true. - Source: manufacturer doc, Microsoft doc, maintained repo, with the name and the year. No video, no "people say". - Expected gain: measurable or not, and how to measure it (RivaTuner frame time, ping, LatencyMon). - Reversible: how to go back. Rank: DO (net gain, no risk) / TEST (one at a time, measure) / NO (placebo or harmful, say why). 5. END: the 5 most useful actions for this specific PC, in order, one line each. RULES - You change nothing yourself, even with terminal access. You propose, the user applies. An agent with access to the PC may read (registry, Get-*, powercfg /query) to clarify a point, never write. - If the report does not allow a conclusion, say UNCERTAIN and give the command that settles it. - No made-up FPS estimate. "A few ms of latency" only if you can say where they come from. - Short. A tweak that needs a paragraph to justify itself is probably not a tweak. '@ $Textes['en']['dns'] = @' DNS turns a name (youtube.com) into an address. i@ A slow DNS adds a few tens of ms to every new site or game server contacted. Zero effect on ping once in a match. ## Test from home @BtnDnsTester The test queries eight resolvers for six common names, three times each, and keeps the median. Lines fill in as it runs, the fastest gets a frame. i@ A server unreachable on the first round does not get the other two. Cloudflare, Google and Quad9 have servers everywhere; DNS4EU, AdGuard and Control D mostly in Europe and North America. A first click picks the primary, a second the fallback, on the same line or another one. A third click starts over. i@ The fallback answers when the primary does not. The same line as fallback takes the resolver's second address; without a second click, that is what you get. @DnsListe @BtnDnsAppliquer ## Which one to keep A gap under 5 ms cannot be felt. If your router is within 5 ms of the best, keep it. i@ Your router relays to your ISP's DNS with a cache: fast for the sites you already visit. The fastest is not always the right one. i@ AdGuard blocks ads, Quad9, DNS4EU and Control D block malicious sites, Google keeps logs, Cloudflare filters nothing. A DNS that blocks domains can break a site or a launcher: if something stops loading, go back to Cloudflare or your router. "Restore everything" also puts the previous DNS back, encryption and IPv6 included. '@ $Textes['en']['dur'] = @' One tweak at a time. You apply it, you play half an hour with RivaTuner open, and you keep it only if you see a difference. i@ Without a measurement, you will never know whether it did anything. ## 1. Priority and cores per game @BtnThreadPilot | BtnLasso ThreadPilot: open source, free, Windows 11 only. Per program, a priority, cores, a power plan. i@ Its rules hold as long as it runs: put it on startup. Useful on a two-CCD Ryzen or an Intel with E-cores, to keep a game on the right cores. Process Lasso: free with a purchase reminder, paid Pro edition. The same per-program rules, plus ProBalance. i@ ProBalance lowers on its own the priority of whatever hogs the CPU in the background. Some advanced features turn off after 14 days without Pro. If you have no stutter, you need neither. ## 2. Memory tweak: 16 GB and recent games @BtnIslc ISLC empties the standby list when free RAM drops under 1 GB. i@ It avoids swap stutter on a recent game with 16 GB. 32 GB and more: useless. Windows memory compression stays on. ## 3. The GPU interrupt core @BtnAutoGpu AutoGpuAffinity tests which core to put the GPU interrupt on and keeps the best one. i@ One hour, on an already stable PC. Redo it after a card or driver change. '@ $Textes['en']['facile'] = @' Two tools, each in its own console. They download their current version every time you run them. ## 1. Win11Debloat: remove what Windows installed without asking @BtnDebloat Default mode. Removes sponsored apps, Copilot, ads, telemetry. It asks before each group. ! OneDrive: before saying yes to its removal, check that Documents and Pictures are not "in OneDrive" (right-click > Properties > Location). Otherwise they leave with it. ## 2. Chris Titus's WinUtil: your programs in one go @BtnWinUtil Install tab: tick what you want, it installs everything through winget. Tweaks tab: the "Standard" preset only, the checkbox script does the rest and explains every line. ## 3. The libraries games ask for Without them a game crashes with "VCRUNTIME140.dll not found". @BtnVcredist, BtnDirectX ## 4. Sound, to avoid crackling Playback device > Properties > Enhancements: disable all. Advanced tab: 24 bit, 48000 Hz. i@ The volume drop when Discord rings (Communications "Do nothing") is a box in the checkbox script. @BtnSon '@ $Textes['en']['installation'] = @' ## Right after the first desktop Before you install anything. @BtnFsutil Turns off PROGRA~1 short names on new drives. i@ Every file created cost one more write for an 8.3 name nothing uses anymore. It cannot be fixed once programs are installed. ## Windows Update Click until there is nothing left, reboot between each batch. @BtnWindowsUpdate ## Drivers, in order - Chipset and network card: your motherboard (or laptop) maker's site, your exact model. - Graphics card: not now, that is step 4. - An exclamation mark in Device Manager = a missing driver. Last resort: Snappy, tick only what is missing. @BtnPeripheriques, BtnSnappy '@ $Textes['en']['maintenance'] = @' For a PC installed months ago. ## What starts on its own @BtnAutoruns Autoruns lists everything that starts with Windows. Options > Hide Microsoft entries, then untick what you do not recognize. i@ Launchers, updaters, RGB suites: each one takes RAM and CPU in the background. Untick, do not delete: ticking again is enough if something is missing. ## The drive fills up @BtnCleanmgr Disk Cleanup, then "Clean up system files". i@ Old updates, recycle bin, temporary files, error reports. @BtnDismNettoyer Compacts old updates in WinSxS, several GB after a year. i@ Never /ResetBase: you would lose update uninstall. @BtnStockage Storage Sense cleans up on its own. i@ Monthly, recycle bin 30 days, Downloads never. @BtnCrystal Drive health and temperature. i@ A "Caution" or "Bad" drive gets replaced, it does not get repaired. ## The PC wakes on its own, does not sleep, crashes @BtnReveil lastwake says who woke it, requests what keeps it awake. i@ Often a browser with a video, or a network card allowed to wake the PC. @BtnEvenements Blue screens: System log, source "WHEA-Logger". i@ A WHEA error = hardware (RAM, overclock, PSU), not Windows. @BtnWlan Wi-Fi dropping: the Windows Wi-Fi report says when and why. ## Defender hogging while you play @BtnDefenderEnregistrer, BtnDefenderExclusions Start the recording, play ten minutes, press Enter in the console. The report gives the most scanned folders: the game's one goes into Exclusions. i@ Never the whole drive or Downloads, that is where viruses come in. '@ $Textes['en']['nvidia'] = @' NVCleanstall installs the driver without the NVIDIA App, then you put the OG Control Panel back from the Store. i@ Since driver 610.47 (May 2026) the OG Control Panel is no longer in the driver. It comes from the Store and disappears with every clean install: you reinstall it afterwards. ## 1. NVCleanstall installs the driver alone @BtnNvclean, BtnImgNvclean - "Manual", latest Game Ready driver for your card. - Components: Display Driver, PhysX. Nothing else. i@ NVIDIA HD Audio only if your sound goes through the monitor cable. No NVIDIA App, no telemetry, no GeForce Experience. - Installation Tweaks: tick as on the screenshot, except the "Disable MPO" line, which you leave to the checkbox script. i@ MPO (Multiplane Overlay) is behind the black screens, flicker and windowed stutter NVIDIA has documented since 2022. The script box sets the same key, ticked by default, and "Restore everything" can put it back, which NVCleanstall cannot. - HDCP: on = Netflix and Disney+ in 4K in the browser, off = slight fps boost. i@ The screenshot turns it off. A game never uses it, 1080p always works. You want 4K: untick "Disable HDCP". ! Rebuild digital signature + Easy Anti-Cheat compatible method: the driver file stays intact, only the installer is re-signed. A game refuses to start: reinstall without those two boxes. The screen flickers and red messages scroll by during the install, that is normal. ## 2. The OG Control Panel @BtnPanneau Manage 3D settings > Global settings: - Low Latency Mode: On. i@ Not Ultra: Ultra sets a hidden FPS cap. Reflex takes over when a game has it. - Shader Cache Size: Unlimited. i@ The default fills up and recompiles mid-game: stutter after a few hours of play. - Threaded Optimization: On. Change resolution: Output color format RGB, Output dynamic range Full. i@ Otherwise blacks can look grey: the card sends a limited range (16-235) to a screen expecting 0-255. On many screens it is already right. Leave the rest at default. i@ Power management, texture filtering, V-Sync: set per game if a game asks for it, never globally. Globally it costs watts or sharpness for nothing. ## 3. Afterburner and RivaTuner to measure @BtnAfterburner The RivaTuner overlay shows FPS and frame time. Without it, you will not know whether a tweak changes anything. i@ One overlay at a time: RivaTuner or Steam or Discord. If the NVIDIA App got installed anyway: overlay OFF, Instant Replay OFF, "optimize automatically" OFF. '@ $Textes['fr'] = @{} $Textes['fr']['accueil'] = @' Ce pack enlève ce qui tourne pour rien sur un Windows 11 frais et règle ce qui compte pour jouer. Suis les étapes dans l'ordre. Chaque ligne du script dit ce qu'elle change et ce que tu perds. Si tu ne comprends pas une ligne, ne la coche pas. Tout ce que le script modifie est noté dans C:\ProgramData\bagarre. "Tout remettre comme avant" restaure exactement ces valeurs. @BtnRestaurerAccueil, BtnJournalAccueil, BtnCommande '@ $Textes['fr']['amd'] = @' Ta carte est une AMD. Le pilote vient du site AMD et tout se règle dans Adrenalin, son panneau. ## 1. Le pilote, depuis le site AMD @BtnAmd - Choisis ta carte et prends le dernier pilote "Recommended". i@ Pas l'outil Auto-Detect, pas Windows Update : l'un installe la suite complète, l'autre un pilote en retard. - Dans l'installeur : "Installation minimale". i@ Le pilote et Adrenalin, sans le reste. ! Ne coche pas "Réinitialisation d'usine" dans l'installeur sans raison : ça efface tes profils Adrenalin. ## 2. Adrenalin : Jeux > Paramètres globaux - Radeon Anti-Lag : Activé. i@ Anti-Lag 2 par jeu quand le jeu l'a. - Radeon Boost, Radeon Chill, Netteté de l'image : Désactivé. i@ Ils changent le rendu ou les FPS derrière ton dos. - AFMF (génération d'images) : jamais en global. i@ Par jeu, solo seulement : en multi la latence ajoutée se sent. - Cache de shaders : Optimisé AMD. i@ Un jeu saccade après une mise à jour du pilote : "Réinitialiser le cache de shaders", une fois. Le reste, laisse par défaut. i@ Enhanced Sync, FreeSync, V-Sync, filtrage des textures : c'est écran par écran et jeu par jeu, jamais en global. ! Sur un Ryzen X3D, laisse le core parking : c'est lui qui garde le jeu sur le CCD avec le cache. ## 3. Ce qu'Adrenalin fait tourner pour rien - Enregistrer et diffuser : Relecture instantanée OFF, Enregistrement du bureau OFF. - Superposition dans le jeu (Alt+R) : OFF. i@ Un seul overlay à la fois : RivaTuner ou Steam ou Discord. - Préférences : "Ouvrir au démarrage" OFF, "Mises à jour automatiques" sur Notifier seulement. @BtnAfterburner L'overlay RivaTuner affiche les FPS et le temps d'image. Sans lui, tu ne sauras pas si une opti change quelque chose. '@ $Textes['fr']['audit'] = @' Le pack ne connaît pas ton PC. L'audit en prend une photo et la donne à une IA, avec un prompt qui sait ce que le pack a fait, ce qu'il refuse, et comment juger une opti. ## 1. Le rapport @BtnCollecter Ne modifie rien. Écrit rapport-pc.txt et AUDIT.txt dans bagarre-audit sur ton Bureau, puis copie le prompt dans le presse-papiers. Ni nom de compte, ni mot de passe, ni clé de licence. Ouvre le rapport quand même avant de l'envoyer. @BtnPrompt, BtnDossierAudit ## 2. Ton IA - Agent en terminal (Claude Code, Codex, Gemini CLI) : ouvre-le dans le dossier bagarre-audit et colle le prompt. Il lit le rapport tout seul. - Chat web (ChatGPT, Claude.ai) : colle le prompt, puis joins rapport-pc.txt. Une proposition sans source ou sans contrepartie, tu ne l'appliques pas. L'IA ne touche pas à ton PC, c'est toi qui appliques. '@ $Textes['fr']['audit-prompt'] = @' Tu es un expert Windows 11 orienté jeu et latence, prudent, qui préfère une opti mesurable à dix optis de forum. Tu audites un PC dont l'état est dans le fichier rapport-pc.txt (à côté de ce prompt, ou joint au message). Réponds en français, tutoiement, ton direct, pas de blabla. Si le rapport manque, demande-le avant tout. CONTEXTE : CE QUE LE PACK A DÉJÀ FAIT Ce PC a suivi le pack "windows bagarre edition" (dépôt github.com/klNuno/windows-bagarre) : - Windows 11 frais, Windows Update à jour, pilotes chipset et réseau du constructeur. - Win11Debloat (mode par défaut) et WinUtil (tweaks Standard). - Carte NVIDIA : pilote nu via NVCleanstall (sans NVIDIA App, MSI High, HDCP coupé, Ansel coupé, signature reconstruite méthode compatible EAC). Panneau de configuration classique depuis le Store : faible latence Activé, cache de shaders illimité, optimisation threadée, sortie RGB plage complète. Le reste par défaut, réglé jeu par jeu si besoin (gestion de l'alimentation, filtrage, V-Sync, G-Sync). Carte AMD à la place : pilote du site AMD en installation minimale, Anti-Lag activé, Boost/Chill/AFMF coupés, relecture instantanée et overlay Adrenalin coupés, le reste par défaut. - Script à cocher bagarre.ps1 (liste tirée du catalogue de ce PC). Cases cochées par défaut, appliquées si l'utilisateur a cliqué Appliquer (la section bagarre-avant.json du rapport le dit) : {{CASES_COCHEES}} Cases décochées par défaut, à proposer seulement avec une raison propre à ce PC : {{CASES_DECOCHEES}} - DNS testé depuis le PC (huit résolveurs), le plus rapide appliqué si l'écart avec la box dépassait 5 ms, avec un secours, le chiffrement DNS over HTTPS et l'IPv6 quand la connexion en a. NE PROPOSE PAS, C'EST DÉCIDÉ - Désactiver HVCI / intégrité de la mémoire, Secure Boot, Defender, le pare-feu, Windows Update, l'UAC. - Nettoyeurs de registre, "optimiseurs" payants, scripts qui font 200 changements d'un coup. - Réglages BIOS : hors de portée du pack, signale seulement. - Plan "Ultimate performance", prefetch/superfetch, "débrider les 20 % de bande passante", LargeSystemCache, IRQ8Priority, files d'attente souris/clavier, TcpWindowSize, fichier d'échange coupé, HPET, TdrLevel, IPv6 off, C-states off, Interrupt Moderation Disabled, outil de timer resolution en fond, Win32PrioritySeparation (0x26 donne le même découpage que le défaut client), SvcHostSplitThreshold, RawMouseThrottleDuration. - Désactiver un service dont tu n'es pas sûr : NvContainer, Windows Audio, Themes, Cryptographic Services, Windows Time, Storage Service, Device Install, WMI restent. - Un réglage NVIDIA ou AMD en global qui se règle jeu par jeu (performances max, filtrage, V-Sync, Smooth Motion). TA MISSION, DANS CET ORDRE 1. VÉRIFICATION : pour chaque point du CONTEXTE, FAIT / PAS FAIT / INCERTAIN d'après le rapport, avec la ligne du rapport qui le prouve. Liste ce qui manque avec la case du script ou l'étape du pack à refaire. 2. CE QUI CLOCHE : pilotes vieux (compare la date du pilote GPU et réseau à aujourd'hui), MSI absent sur le GPU ou la carte réseau, programmes en démarrage automatique inutiles, services tiers en automatique (launchers, updaters, RGB), bloat Store encore présent, antivirus en doublon, erreurs système répétées (WHEA, disque, pilote), disque presque plein, HAGS ou optimisations fenêtrées incohérentes avec le GPU, DNS lent ou du FAI. 3. OPTIS PROPRES À CETTE CONFIG, que le pack générique ne peut pas connaître : - le CPU exact (E-cores / P-cores, X3D, portable), le GPU, la carte réseau (Realtek, Intel, Killer, Marvell) et ce qu'il faut régler chez eux précisément ; - les programmes installés (Discord, launchers, RGB, overlays) et lesquels coûtent en jeu ; - l'écran (Hz, G-Sync / FreeSync) et la cohérence V-Sync / cap FPS / faible latence ; - la RAM (barrettes, vitesse annoncée vs XMP probable) : signale seulement, pas d'étape BIOS. 4. FORMAT DE CHAQUE PROPOSITION, sinon elle ne vaut rien : - Quoi : le réglage exact (clé de registre, commande, menu), prêt à appliquer. - Pourquoi : le mécanisme en deux phrases, pas "ça optimise". - Ce que tu perds : la contrepartie, même petite. "Rien" est rarement vrai. - Source : doc constructeur, doc Microsoft, dépôt maintenu, avec le nom et l'année. Pas de vidéo, pas de "on dit". - Gain attendu : mesurable ou pas, et comment le mesurer (RivaTuner temps d'image, ping, LatencyMon). - Réversible : comment revenir en arrière. Classe : FAIRE (gain net, sans risque) / TESTER (une à la fois, mesurer) / NON (placebo ou nuisible, dis pourquoi). 5. FIN : les 5 actions les plus utiles pour ce PC précis, dans l'ordre, une ligne chacune. RÈGLES - Tu ne modifies rien toi-même, même avec accès au terminal. Tu proposes, l'utilisateur applique. Un agent avec accès au PC peut lire (registre, Get-*, powercfg /query) pour préciser un point, jamais écrire. - Si le rapport ne permet pas de conclure, dis INCERTAIN et donne la commande qui tranche. - Pas d'estimation de FPS inventée. "Quelques ms de latence" seulement si tu peux dire d'où elles viennent. - Court. Une opti qui demande un paragraphe pour se justifier n'est probablement pas une opti. '@ $Textes['fr']['dns'] = @' Le DNS transforme un nom (youtube.com) en adresse. i@ Un DNS lent ajoute quelques dizaines de ms à chaque nouveau site ou serveur de jeu contacté. Zéro effet sur le ping une fois en partie. ## Tester depuis chez toi @BtnDnsTester Le test interroge huit résolveurs sur six noms courants, trois fois chacun, et garde la médiane. Les lignes se remplissent au fur et à mesure, le plus rapide est encadré. i@ Un serveur injoignable au premier tour n'a pas droit aux deux autres. Cloudflare, Google et Quad9 ont des serveurs partout ; DNS4EU, AdGuard et Control D surtout en Europe et en Amérique du Nord. Un premier clic choisit le principal, un deuxième le secours, sur la même ligne ou une autre. Un troisième clic recommence. i@ Le secours répond quand le principal ne répond pas. La même ligne en secours prend la deuxième adresse du résolveur ; sans deuxième clic, c'est ce que tu obtiens. @DnsListe @BtnDnsAppliquer ## Lequel garder Un écart de moins de 5 ms ne se sent pas. Si ta box est à moins de 5 ms de la meilleure, garde-la. i@ Ta box relaie vers le DNS de ton FAI avec un cache : rapide pour les sites que tu visites déjà. Le plus rapide n'est pas forcément le bon. i@ AdGuard bloque les pubs, Quad9, DNS4EU et Control D les sites malveillants, Google garde des journaux, Cloudflare ne filtre rien. Un DNS qui bloque des domaines peut casser un site ou un launcher : si un truc ne charge plus, reviens sur Cloudflare ou ta box. "Tout remettre comme avant" remet aussi le DNS d'avant, chiffrement et IPv6 compris. '@ $Textes['fr']['dur'] = @' Une opti à la fois. Tu la fais, tu joues une demi-heure avec RivaTuner ouvert, et tu la gardes seulement si tu vois une différence. i@ Sans mesure, tu ne sauras jamais si elle a servi à quelque chose. ## 1. Priorité et cœurs par jeu @BtnThreadPilot | BtnLasso ThreadPilot : open source, gratuit, Windows 11 seulement. Par programme, une priorité, des cœurs, un plan d'alimentation. i@ Ses règles tiennent tant qu'il tourne : mets-le au démarrage. Utile sur un Ryzen à deux CCD ou un Intel avec des E-cores, pour garder un jeu sur les bons cœurs. Process Lasso : gratuit avec un rappel d'achat, version Pro payante. Les mêmes règles par programme, plus ProBalance. i@ ProBalance baisse tout seul la priorité de ce qui pompe le CPU en fond. Certaines fonctions avancées se coupent après 14 jours sans la Pro. Si tu n'as pas de saccades, tu n'as besoin d'aucun des deux. ## 2. Opti mémoire : 16 Go et des jeux récents @BtnIslc ISLC vide la liste d'attente quand la RAM libre passe sous 1 Go. i@ Ça évite les saccades de swap sur un jeu récent avec 16 Go. 32 Go et plus : inutile. La compression mémoire de Windows reste activée. ## 3. Le cœur de l'interruption GPU @BtnAutoGpu AutoGpuAffinity teste sur quel cœur poser l'interruption GPU et garde le meilleur. i@ Une heure, sur un PC déjà stable. À refaire après un changement de carte ou de pilote. '@ $Textes['fr']['facile'] = @' Deux outils, chacun dans sa propre console. Ils téléchargent leur version du jour à chaque lancement. ## 1. Win11Debloat : enlever ce que Windows a installé sans demander @BtnDebloat Mode par défaut. Retire les applis sponsorisées, Copilot, les pubs, la télémétrie. Il demande avant chaque groupe. ! OneDrive : avant de dire oui à sa désinstallation, vérifie que Documents et Images ne sont pas "dans OneDrive" (clic droit > Propriétés > Emplacement). Sinon ils partent avec. ## 2. WinUtil de Chris Titus : tes programmes d'un coup @BtnWinUtil Onglet Install : coche ce que tu veux, il installe tout via winget. Onglet Tweaks : preset "Standard" seulement, le script à cocher fait le reste en expliquant chaque ligne. ## 3. Les librairies que les jeux réclament Sans elles un jeu plante avec "VCRUNTIME140.dll introuvable". @BtnVcredist, BtnDirectX ## 4. Le son, pour éviter les crépitements Périphérique de lecture > Propriétés > Améliorations : tout désactiver. Onglet Avancé : 24 bits, 48000 Hz. i@ La baisse de volume quand Discord sonne (Communications "Ne rien faire") est une case du script à cocher. @BtnSon '@ $Textes['fr']['installation'] = @' ## Juste après le premier bureau Avant d'installer quoi que ce soit. @BtnFsutil Coupe les noms courts PROGRA~1 sur les disques neufs. i@ Chaque fichier créé coûtait une écriture de plus pour un nom 8.3 dont plus rien ne se sert. Ça ne se rattrape pas une fois les programmes installés. ## Windows Update Tu cliques jusqu'à ce qu'il n'y ait plus rien, redémarre entre chaque série. @BtnWindowsUpdate ## Pilotes, dans l'ordre - Chipset et carte réseau : site du fabricant de ta carte mère (ou du portable), ton modèle exact. - Carte graphique : pas maintenant, c'est l'étape 4. - Un point d'exclamation dans le Gestionnaire de périphériques = un pilote qui manque. Dernier recours : Snappy, ne coche que ce qui manque. @BtnPeripheriques, BtnSnappy '@ $Textes['fr']['maintenance'] = @' Pour un PC installé depuis des mois. ## Ce qui se lance tout seul @BtnAutoruns Autoruns liste tout ce qui démarre avec Windows. Options > Hide Microsoft entries, puis décoche ce que tu ne reconnais pas. i@ Launchers, updaters, suites RGB : chacun prend de la RAM et du CPU en fond. Décoche, ne supprime pas : recocher suffit si un truc manque. ## Le disque se remplit @BtnCleanmgr Nettoyage de disque, puis "Nettoyer les fichiers système". i@ Anciennes mises à jour, corbeille, fichiers temporaires, rapports d'erreur. @BtnDismNettoyer Compacte les vieilles mises à jour dans WinSxS, plusieurs Go après un an. i@ Jamais /ResetBase : tu perdrais la désinstallation des mises à jour. @BtnStockage L'Assistant de stockage fait le ménage tout seul. i@ Tous les mois, corbeille 30 jours, Téléchargements jamais. @BtnCrystal Santé et température des disques. i@ Un disque "Prudence" ou "Mauvais" se remplace, il ne se répare pas. ## Le PC se réveille tout seul, ne dort pas, plante @BtnReveil lastwake dit qui l'a réveillé, requests ce qui l'empêche de dormir. i@ Souvent un navigateur avec une vidéo, ou une carte réseau autorisée à réveiller le PC. @BtnEvenements Écrans bleus : journal Système, source "WHEA-Logger". i@ Une erreur WHEA = matériel (RAM, overclock, alim), pas Windows. @BtnWlan Wi-Fi qui décroche : le rapport Wi-Fi de Windows dit quand et pourquoi. ## Defender qui pompe en jeu @BtnDefenderEnregistrer, BtnDefenderExclusions Tu lances l'enregistrement, tu joues dix minutes, Entrée dans la console. Le rapport donne les dossiers les plus scannés : celui du jeu va dans Exclusions. i@ Jamais tout le disque ni Téléchargements, c'est par là que les virus arrivent. '@ $Textes['fr']['nvidia'] = @' NVCleanstall installe le pilote sans la NVIDIA App, puis tu remets le Panneau de configuration OG depuis le Store. i@ Depuis le pilote 610.47 (mai 2026) le Panneau OG n'est plus dans le pilote. Il vient du Store et disparaît à chaque installation propre : tu le réinstalles après. ## 1. NVCleanstall installe le pilote seul @BtnNvclean, BtnImgNvclean - "Manual", dernier pilote Game Ready pour ta carte. - Composants : Display Driver, PhysX. Rien d'autre. i@ NVIDIA HD Audio seulement si ton son sort par le câble de l'écran. Pas de NVIDIA App, pas de télémétrie, pas de GeForce Experience. - Installation Tweaks : coche comme sur la capture, sauf la ligne "Disable MPO", que tu laisses au script à cocher. i@ Le MPO (Multiplane Overlay) est derrière les écrans noirs, scintillements et saccades en fenêtré que NVIDIA documente depuis 2022. La case du script pose la même clé, cochée d'office, et "Tout remettre" peut la rendre, ce que NVCleanstall ne sait pas faire. - HDCP : activé = Netflix et Disney+ en 4K dans le navigateur, désactivé = léger boost de fps. i@ La capture le coupe. Un jeu ne s'en sert jamais, la 1080p passe toujours. Tu veux le 4K : décoche "Disable HDCP". ! Rebuild digital signature + méthode compatible Easy Anti-Cheat : le fichier du pilote reste intact, seul l'installeur est re-signé. Un jeu refuse de se lancer : réinstalle sans ces deux cases. L'écran clignote et des messages rouges passent pendant l'installation, c'est normal. ## 2. Le Panneau de configuration OG @BtnPanneau Gérer les paramètres 3D > Paramètres globaux : - Mode de faible latence : Activé. i@ Pas Ultra : Ultra pose un cap de FPS caché. Reflex prend le dessus quand un jeu l'a. - Taille du cache de shaders : Illimitée. i@ Le défaut sature et recompile en pleine partie : saccades après quelques heures de jeu. - Optimisation threadée : Activé. Modifier la résolution : Format de couleur de sortie RGB, Plage dynamique de sortie Complète. i@ Sinon les noirs peuvent être gris : la carte envoie une plage limitée (16-235) à un écran qui attend du 0-255. Sur beaucoup d'écrans c'est déjà bon. Le reste, laisse par défaut. i@ Gestion de l'alimentation, filtrage des textures, V-Sync : ça se règle jeu par jeu si un jeu le demande, jamais en global. En global ça coûte des watts ou de la netteté pour rien. ## 3. Afterburner et RivaTuner pour mesurer @BtnAfterburner L'overlay RivaTuner affiche les FPS et le temps d'image. Sans lui, tu ne sauras pas si une opti change quelque chose. i@ Un seul overlay à la fois : RivaTuner ou Steam ou Discord. Si la NVIDIA App s'est installée quand même : overlay OFF, Instant Replay OFF, "optimiser automatiquement" OFF. '@ $Logos = @{} $Logos['adguard'] = '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' $Logos['bitsum'] = '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' $Logos['christitus'] = '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' $Logos['cloudflare'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAVZSURBVFhH7ZhdaBxVFMdvmo+dmaVgBeuTL4L4JIgviog23TRpkt2Z2XxZP6gPggHRKlbE2o9YiqkUKlQFtdRqLcbSF6UlNS1qVNI29FP7ZS2WFvWhEdKiTXZ3duaev5w7M+lkd5OWdDEL9sKfmb333Ht/99xzz7BXCCEEdQidLL3bs/WjZOuXZ0uuqf1BbcYH2ZZYPXNNlLypbUGXAXQYQNssqysOmdbHXEtPKbisGWuQbfq4arQrRF0GPFM7Tk/fGRfS0tcxdZHRbCptgGwjB1t7RJClvYPOCgRMGy61xxKCLH1jRQLaRp7aYvW3AGek/y9gazWwSAANAmgUgKmpyYrsrqeyAlo60CRACwWoaz7otQRoZQvw4oOglhqA6xm8sN90KgtgOg4kayAbBWj5Y6CBT4GLp0D5DIhc4Opl4PSPoL71oM75QEIUjzGVygKYrAXMuZCfrQX9M4qJQg5AOQDutaqzh0Gv1oOahO/xwrEKddOAZkzFGn25KUCQgDteWl7GN7kyAlq+AMQxWjheoWYEuFj4B4C90CBA69oBmQfgFUOVEi/j3FEVp2itKR5/xoBmHWRCQHbfD/lWJ2jZQ0D7HcD5475nCkGmUuBJ+vAVdXCmPd03DJiqg0zF4fX1gi6PgHiGsVHg3DDgXAW8bDHIdGLAXw9BpuYCC4IdSdUVz3vDgIsEvPdf9j2l9igS/OyRQoDriWN15ALojVZQTwfk603w2m8Hcd7kuObMcMOAnGRba0E/D/pAhZPNRFz2bQXt3OC/O2OgU0PAmybQXANKBrE5LSCvIlUH4rzVNAf480x5AD32PkFuXgE6stcfE3zI/MIZQZq6v+VTAnJDSxXQUgPqsUH9W4C/RwDpRCbL+LGnFLzLqHJ+HgylwsJTEN5gH5wldwMXT/tU3MZjkA8qt63xt7utFGA6rhKpu/QeyKGvADdYHQ/ijl0DVKvmCf1JVUyq5MzK+8B8gHghajE5YOwK5O6PkGm7jbKPCpJfrAccPmB8sr0gsUvQlUuQ3fcBrVUlAJO1kNY8eAd2BxPnC7aIV+pAHtwFb+tqeNvXwduxAd62tXA/Xh1oDdzNK+Bteh7ofRxYvwT09hPIP/sAMvWCMs2CMosEZVvikKtaId99QfWnkz9MHD75ySr/227pBYCc63qfinitVBxlQJd+A50dBp0ZAp0eAv1yAHRmP+jEd6ATg6CT36snjvYDx/YAP+1Vi8mm51FmoSBn6b3wdm4Eju+d6IO/Lvie51g81A80zwFZWgSwQwcaq0Dffh7sWgm4SVvMGZElIyqsm1zyKy04HXcBF09EalVm9cODw4h7sjebqosB3cZqyPPHIp3LW/K9z0AO7iisLirekX2ghqoooKEAZXM1aFsPvOEBePt3lU8H+yG/6YN86WHIr7fCO7in2CbU8ADovWWgxbzFHIPxazFIFnuxChwn5dT4QkG5hCAvWUtuUzWcRBWyJexCOY2CYOsgi09xBFBa6t88nFQdZZLllZuKwU1p8FhmDNkSNqHy/AWzJgHyFjOcrpRPaZSJaDyiaH2obEqjnKnDSWnk8NPUEbapupRG4djh+PnQPuiTC965nm1KepC3mBtdHiSQ6mhOFk/ANoHU5GzLHuK6cAwlrovUT9emPBwCTvWpI0s1qKf03Rz89t9DG25jgdsDTdiHYttQpexsQ317Weo9GFPNMxVgxegW4M1qMmCFXr/Zhqeu3zxb66nQC0xXXWA6Se1JdTc93b+s/1qdKnPsQ1IYAp2iLm/GtnNlpVyiU1q/SlYsMXHLT4tFDLbxnGcbh8nSR2dFaX2UbON3atcHonD/AsNCW8rpOz1wAAAAAElFTkSuQmCC' $Logos['controld'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAY4SURBVFhH7VhZTJRXFP6ZGeafYZlhBoZtZkAYdBwU0KpFXJpYaNKkaWyapvah20u1VWNoUhtrldR0sUldom2wpRXaxKAhLLKDCzy4s1gXVHbQirUWcEMU+/A15/wzOM5Mh1GShjY8fPkv95577jf3nvudcxFUKmO3KJoGRdE4wWAaJG6CKJqGRFUMRJV5giEGomi6KzBb7jBNMJghisaBSYJPj0mC48X/kyBNMkHhHw25IhJyuQSZPIL/dtjJFVFSn32cxmjOqA83v57wRATJ2AxB0EIQAqAUdQjSRiJEb0JIqAm6MDOCNFHwV0YzEWpTH42RDdkqVXoIQiAEQQOlaPfpto7rmj4RNEMmM0AQVEhInIdlK9biq9xS/FjViPyjbdh3rAOFjZexq+wEDFHTYIiaym3qozGyIduv8yrwxoq1sCbPhyAEwc8vbAySPhBUqmjXNAjRx2BV1jYUnvoNdb0jqGm7g8qWAZSf/5NRfekWys7egMWWjITEFG5TnzTej8oLA6hpvY363hEUNfUh88ts6A1TeUeVoue1fSBI5NSYnrwQP1U3o65nBBUt/Shu7kPJ6WuPoerSTeyu+RXB2lhodFOwu/YM97na0Vzycbj7PnIPnMOstAw+Gfe1xyKoJnLBiLM+i71H2nGw8x5KTrsTc+Bg1zA+2ZbHixHWb//ZPsfd1oEDHUMoONmLxGcW8VpuHLwRpJunCYnCtvx6HOoe9rhrDpSd/QMVLQNISX3efok0mDU/nUOg7NwNN3sHyCf9iJzKJuhCYyGThftKUDra19/7GHU9D9wcO2P/meuo632IzM+/g+AXCH9/I/yVRo6tVVnbUd/7EKVnrrvNcwaFzrsffgZBUEoVzFgE5fIIaHUx2FV6ggPb1aEDtDv1l//Cpu8LoA40QKGgHSA/Zm6rA8KwYecevlQUd67zHahuvYWcqkbowqZAJnfeRY8EafcCkLrkJdS03uFbSDvgAJGi4D/c/QDl527gg0+3IDCIJMhVMsgP9enx5uqNKGq6ikNdw6htu4OK8/3sxwEiX9sxhLSMl3ltZy7/SHDxi6/x1le33kbVxZuoungLlRcGsf/078itPYt1W/OQPG8Jh4JcHg6V2jXATdwnV0SwjcWWipUbtmBHQR32He9CUeNVFDX28be4+RoqWgaxIOMVDo0xCJo4GwRqYmGbnYbk1MVImreIMXPuQkxLmgu9wcqL0oVQKo0ebp8zpNQoCKF8u+WKMJjiZiLemoz46RIstlkwW2ZASbrLGcZ5rgeCZKQUjTDHJ8IyPQVx1iTEW5P4a4y1wc9PY5eTUB9SlpltHARlcj2iY2yw2FKYGH0TZsxGTEKS3ZZ+sFeCdMSBWPjCq3ykJc3XUNzUN4p9x7uxs7AeKzduhcVGKUvNx+j9iAMwZdpcLF+3mefmH+18zCetQTKVlr7UlyOWYnBBxlIcaB/iAH4soM/3c6BTwBc3XcVbq7P4IgiCwWUn7ZdErcfba7JQ1HgFhzqHUdt+190nXZL2u0hL9+mSmPiq6wxx+LGqifOpqyw4QI5JQkhK1AHuMqNSh2Ljt3tYC73JDEnZDxUNCCGxHltmCDEsmiSeh3tG3Bw6g6SHhJoKCToeEmlJqAPw/vpvfBJqkqx3MrN8F2reRVk4dGGxyKlqwsGOeyjxlursx5SSmm5PdSHcpirGW6ojn5TqsktPQqs3c4Jw5uCVoBRDwUics5gTOsWj2wJOoIUeFQtqrN/+CxcQ3n4YFwsnemCb/Rznb08cvBCUQAtSSUSlEZVIvpZbJOYk8K52o+VWz30uyVLm066rPZDzkSAVkxRb+vAEZH6RzepPRScXrBeoYO1nuBas5aMFqzTOBWvbbb5UBaeuYM2mHdAb4riyHkfB+sjQz4+ENgjW5FQsW/4RNueWI6eyAflHWrH3WDsKG3qRvf8YQiMSYIi2SiV/Qy+PkQ3Zbs4r5+eCJXGOJNoy1/ztCp8JSsZSRnB6NGmo6jFCqzfy4ygwWHq5caoMjuQ+GiMbsqU50qNJOypH7us8NUGnSSrHszPq0bNSHgmFImrUjtrOY2TLz84xU6PLWk9O8N/EJMHxYpLgePHfITjB/4muUhm7RNE8QGwnFswDKpWx8289hUMSSdWa3wAAAABJRU5ErkJggg==' $Logos['crystaldiskinfo'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAuVSURBVFhHtZh5cJzlfcf9B0PSkGIGAgFcYAoknXZIA4FkCk1oSKEJacg4TsJRIOYwFB9gh8OJscE1ITbgcdIKbNdgRzaxHYGxwUiKsS0fOizLQrYk69qVdnWs9tAe77G77/vue386j1byIfmQafud+e3u+zy/ed/v/u7nneT7fsj3femziut6UsGwJEM/WcSa53nj9M9RwpN8389zrvDB0ByysjksimSgSIVxIvZUuYCpu2PvMCH4vq8JgtLYjdNB10wSMYX4oIyq6BQKNq7rjVU7BtfxhnUGh/J0hjIMxVRc0xqrdlr4vi9PiKBlOgxFFVIJFUOf+ANGIeyXLnioWZOufoVoTMWxzm7VCRFUJH3YYlreHLs1jB7ZpVM6+8MEmtMuX9um81FQQ44raKoxVuUknJVgaihLMq4KxbFbw+jPuqxtt2hOOWO3Tom2jMPGgCVCmKTusaddIpPMjVU7hjMSHIqrSOkz50/G8JALpyZ/JjQmHPpyHlHdpz+WIx7PjlUZxmkJppM55Iw2dvn/DNOrTF46ZB+7DkXzJIbGW/KUBEXMCdf+f2J7r8fyw8fDwvKhJaQiSfpJeuMIimyNR5WTYq5egn3J05eSz4qx1Slt+DQGZRz7eMKNI5iIqehjysirYbiuwiGam1im/m9wNG4S6FePXZ9EUBThWGK8a18LwXllDhXhU5eZc4Xng1QAwaNXhYzuM+oww4PqQBbdKMbnSQQHogrKGOuJKHkr6HNhqU71oEVd3GZJY4Ft3YLsxLLXdGEwB7YHAQn2RqAiBFsDUNoKK+o9Vh6yqR8okupM2bT3Fa14jKD4B50D8vBiARCqnwK3BuCH5RY/L0uxYFeGy9/KcP4qldWtQmtiWNkK91bCgUFRXkTtLFowa0FKh5YhWN/s8cInBstrNNozHvVBkQcnEFTyDlHVoFWGhRIMAO948KVGmL7LpPRojtVNWV6pVnmjPsvhhInpFi0oPoXbhIglIeK3gLDatA9gxg6IaFDwimK4RRG/NQfCKmzt8phbqfGrXXl2BTXymnucYFI12Tdo8HC1w8NJaAM2+jCnF6ZVuTy6Q+XH5Vl6sg7JgkdN3KI8ZNCnFEuF54FIPueEzOyRYUUjzKuCphToPsg2SCOiOpB1QHYg70KXDGuO2Dz6ocrawxpJyR4h6LpSW7LAM/sVflxlMVuGBmCDC9d+Cld+4FLarnNlqcqbI641fWjNOPyhXWdvvzVMTkAQDCmwvg1m7oKZVbA+CCEdJOFSE9IjMmgUr4UFGxT4KAG7Ij5PVub4r0Ma0YyF73nyJM+0pa09eaZVqNy/z+FZBQ4Av9XhSw2wuMUVirwXNNnQYQ67UNy04EK/5rGuw2RDu0Vt1OV3TT6z9sCM3fBsHbzcBCWdsCcNsQIkDYgbkLNgbQJm9EDShH9rg9kdUBnxeHq3xrImg4Y+Hdey5Um2aUur2nL8vELlFzUuCxWoANZbUKYWb2A4xVgT3zkbskIsyDsQN2FT2OX5epfZ++GX9bDoCCw4As81wYutsLofDmRhUIeYLooyNKhwXSu8kygSXBSE3x31eK3JZMFBjY8783imLU+yLFtaeiTHTyuyPF7n8rIMG4BqF7odSFqgWEVCgpx6gigjsSR0Ph6CVzthUQvMa4anW4ryTCss6II3o7BDgY6cmGRAMaAkBiuisGYQlgdhZdDn3bDDE7V5PujM4QkLmpYtLWnOM60yzxN1LovTsA6os6BTuMSEIbMYL5IQq/gtLCHcJcjn7aKld8rwej+8GIBn2uCJNvj3DpgTgPlhWBaFtSl4OQbTwrA0BptT8HwAHmqCjYNQ0uvyxEGNLYERgpZpS8s6NKbu1Hms1uXlJMzIwu+zENAhrEOvDv06RHVIGJCx4KNej5cOw7owtCqgmJAsQFO+SGLJIDzbC091w1M9MDMMs2KwUIYfDsK3gvB4GO5ph0Uh+GU7zDsCy3ocZjTpbA9ruMLFIklW9Rb4/l6T6bUejwXhL7phagaaNWjOQ2se2nMQyEFPHiIGdKiwuBkeOQTPtsOBTDG2Ehr0aVCThVIJfpOE+VGYG4fNFnQD+xwoFZkrwfw++FMKGhVYFYLFQZv7DuvsjuhFC4oysz1l8Z06m/vqfW6rg0lNMDMLew3Ym4fqPNTmioHdlIWWLATz0JCGZe0wpxVe74GeLPTnoC8HAznozUFzFj6RoTwHJw74Qw4MGbAzAwcUiNqwT4YXAjZTP83RkCwUy4wo1C05hx8cdbizAW6phpsCsMKFsgJs0WC7kDxUqrBTgT0yVMvQKESCuhTUpuCIBEdlaBMiEkKBUBZCYjDIQly0uJECLUqOsLhoe2kLWnX4IAEPt5k8eDRHSDGPd5Ks6fFkn8WNh+Gudpiag4Uj7e5tC0oL8K4B72qwKQtlMmxJw7YUVIgCm4DdCaiKw54E7B+CmiGoTUJVAhrT0JSBoAbi+CJiWlg3phUJDphQq8LKQbiz1WJuVxa9cEKrEyZ/e1DjpjDcHIK787AcKBPrQIkHb7pQYkGJBiUqlGTgzUTxpv/dD+/0wrpeWB+GjX2wJQKbeuFbf4YlrUXiIqYzfjH5hKXD2WK8isTaloa54vltFu/0FEfUkwi2pXXuirjckIEXXPiYYsvbMUJyBbAMeMWB/9BgkQwLhmB+BH4Vgl8HYGEnvNReLNKLj8LSdrikFL6/A7ZEYVM/fBiFT2JQk4AWqdjmKtLw+xh8u8vne+06bfEx45a4sE2XVwcK3KLCekEYiAFhYCewWkzXwK+BuRbMzMFjKbg3Aj/qhrvb4F+bYWozfH2rx0XLfb652eOKNR7/tN3n8RqfxS1QIubAEGyPwHv9PpujPqvj8GAfXN0Fv+1RcAunGFgFutIFZqsufxBnBHFGGZkPe4Fy4A1BTpzKXLg3D3el4eYB+FoX3NAMNxyEv6+HG/b6XLbG5qrNDtdutrlgqcPk/3S5v9obbn1vdMDbYbiz3OXRRo/nE3BNAL4bKNCROM3IL+DZHvsli/V+cSYchTgINFPsME8D9zhwWw6+moS/DsP1bXD9IfhKDVyzzeXCpTqXLM9x9R81Ln9bZ8oWk7/5xOGfazweqveY0wSzPvW4tszh78pdpux1uTroURqWi3PbCMYRFJDzDjtVmyoxVo2sCYOHgG3A88BtFkyW4Joh+EoYphyBv6qFq3bB5X9yufitAlf+scClK7OcNzvFFRvzXPVnkyk7bP5hv8eNWx2+uMbhm/sdpuxxOO+Ax4vdCln1LMfOUSSyDjvzLnUjLhYQLq8E5vhwtw2vGPCTHNwSgYsOwqV74NKP4bL34cubXC5bb3DpuhxfXJLkkjUqF79vcFG5y80H4L5Onxv3uFxcbvP53RbTg1kG0xM8uI8iojjsyLvDCSKSRXSBVuA3Pjxgw3su3DgI5zfChfthciVMfh8mb4DJaywuXJnnL1dnuWBtjgs2GXx5h8u3D8P0AXhSgusaPM476PJgq0Igrox9/DDOSFAgpjpUKg5r/aJ7RdnZJY6iPkw14foYXNQGX6iHz+2Ez30I55fB5zd7fKHM4ZKPHK7f53J7Czw0ALPScH8S/rYXrgq6PBeUiKTGH3VHcVaCAnLOpSpt8VrBZQHwuugwI2VnKTDThAdU+FEC7uiFO7rhX3rgJ30wPQZzMjBXhekZ+E4Erg353NqpszqYRlbO/P5nQgQFXMsjmDbZIFk8bbg8DDwCzAOecuEOBR43YT7wnAPzCjArB4/IcM8Q3NTu8tVmm3/s0lnYJXEkIoN19ld2EyY4CtNw6UwW2BzXeVGyeEB1+J7ic2UMruiH29NwewpujcM3BuDrQZvvdhf42WGF15qTNEUkbH3ibyhGCZ75JeBpkDN8uhSHqozFxkSB5RGDhWGDBSGdV8Iaq/o1tsc0mpM6inb8Vdu5YPQleq9g+pnF82TXsGTbsGRLiG7Ktm4Or4m9cfrnJr3/A6XT5t6Pwi2yAAAAAElFTkSuQmCC' $Logos['dns4eu'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ8SURBVFhH7Zc9axVBFEDzP5LKLlVIkUIwIAaSN7ugRSCNghAEBZtXBLFQULRJIUIgjWCKCIJYpBBik8ouXapUdlb+iglnl4u79+187ogPTHGyefs1Z+7Mnbm7sLhS315crV/NKwv8WVqt7bxyLTiW/09wZX323BiKC355Z+yNtdnzuWQL3tuuer+nj409PZzY39+37I+jid1/bnrXzd06SzxL8NZm1Ujo8x/ftoJnH7ZmZD7tG/vgfl86hmRBIoME/DyZ9CKJhERSztGZi8/t/cA9Wt5HsiAQPRp7s9ePiDTMsStB5Lj/17fZyIZIFqSBF1PTZCtHfX2I3YemieSTR5XdqP5EPEY2ShCR5Zv9pCiBTqQhvII7O1UzjJdf27lTQpSoPXtq7OFr0ww57yfC+j7BKwi8SOYPS4W+nsPandqeH7fzmITydTooSNSIHpkYM2diIdF4L0uTvtYlKEhvOdLLUtsYHSVp+F+OLoKC/xqvIBHTW1ppQm0MCspD718ae3LQ7hYy1KWIbWNQEHhQticqFF+m5RLThlOQHrK06P22JDFtOAXZksgwXpJThcQQ04ZTcF6IEuxu8CWJeW+UIBO41DYnMKxsd/q8xitIscAEDmVaCuwi3ewlSShy9X2CVxCoNKR61tfGwNrHe5HV17oEBekdmUbRMLSQ5kAUqZJ4r67KNUFBF7HVtEA1nVNsJAsyL+k9Q46krka0BL8pUEkI5jBTJqVsSxYkm6mwmT/MI500+sNdhlMSwrUgu0gWBKLBt293gvs+3BlezhF13aEQyYI0IMOqF1rXh7usoTybmmjJgj6GPtzHUlTQ9eE+hqKCf4NrwbHMveAVWwlOh/CaKGAAAAAASUVORK5CYII=' $Logos['drapeau-en'] = 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAAwCAYAAACynDzrAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANOSURBVGhD7Zq/axRBFMfH/0A7rcRC7LTSxiqChdpY2AgWahexUEGtBDtTBCIeGFBEIrFRkCsC4o/CQoi/tfBAFIN4xuCpnBfNXbwzjryDGWd3Z3Z23r6ZbebBN+TH7Mzc530SkkfY0d2n+KPVm4d5vfMA776d42q1O11+6OQUX7VhlCQj+yf42fMzw1w4VuPTe49bA+vEM/B8ek9sdh2s8YVWJ/F6+1++8jf7RiUT9nTjiPwA8mTtVj4/cSXxENTtBw2+btvpzCGugRcpqnnuYuJsU2CdKHg+vadr1mw5wa/enJV7impdr/Nn67cnzmbPN+3IXAjiy6aqARWxRg3782ORvz9yJvMFiA+bqgLkYo0ISMLEwvb9hzyETVUAcrVGFUMCggphU0hAWGtUGZhuA582hQJUxhq1mGkzXzb5BkRhDZRo+hBQ3sbUNvkEpGs0xhq10RJQ3iGUNvkAZGou1hp17wygvAMpbKIGpGtoWWusgPIOL2sTFSBTEymsKQwo7yJYmygA6RpHaY0TIBHdpTA2vfvQku9jAL1sNOX7oqitUVMYEITKJlEYQGr5skaNEyARKpvKAPJpjRqmzmdcMjZ5R6t7b+4j/1yb4p/GJjNpXbvFV7o9uRYD6G+/z7/dmMnsDZkfv8QXZ1/ItaLg23r88r3MaygSBm+qKgyg0BUBWYrBOBMuUEUaew5nYOgC69LPhgqDmW/6QjH/EwFZEgFZEgFZEgFZEgFZEgFZEgFZEgFZEn+TtiT+LWapCMhS6HkQZLr+mP9cWk5suPJrKXde87u5INdiAA3andx50+B7W66F6i0PeP3uq8zdiwY1UTSNXl2nfBhAUJjppeuoVcQZkG7cipkNQ2EBiXKdhWPGroUBUVkDyovCAEp/S/u2qRAgKmvgYjAbFoUBBLNwXaN82ZQLiMoa9TLwg08UBhA8D/vomubDJiMg3QWw1qgXoAIEMTWQ0qYMINOhZaxRQwlIRNdMKpsSgHQHUVjjGxDE1NiyNg0BmTansiYEIBFdk8vYxHQbUlsTEhDE1HCMTYn/coXyYY2aEIBEdM13tUkC8mmNmpCAIGVtGgLybY2a0IBEsDaxENaoqQoQBGMTAxDpT1Jbo6ZKQCIuNv0D76xzXBJnmLUAAAAASUVORK5CYII=' $Logos['drapeau-fr'] = 'iVBORw0KGgoAAAANSUhEUgAAAEgAAAAwCAYAAACynDzrAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACLSURBVGhD7dAxEYBAEATBN4UAROAQf0iA/JNJuKy3qgXsrHXd76TpPecxau2H/ja9/dDfBAoCBYGCQEGgIFAQKAgUBAoCBYGCQEGgIFAQKAgUBAoCBYGCQEGgIFAQKAgUBAoCBYGCQEGgIFAQKAgUBAoCBYGCQEGgIFAQKAgUBAoCBYGCQEGgIFD4AO3KjiyUFE3SAAAAAElFTkSuQmCC' $Logos['google'] = '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' $Logos['microsoft'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAK3SURBVFhH7ZZNTxNRGIVPVEgIJmykbEygA7QNW4QOhp3y4UJpQXYujCv/BJQWFv4FE6PSDvVrpRuZmZYCCXHDwoX/wZhAh+nQ0jp4X3OnE1q0i96uhmQmeTKrk/v03ElzgKvw/Foeu2k+GoqaDwdl5y1IOT4on8SCk0y+3TN+iK4VHRMJDXJyB1FReI7z4hB9F4Lm0lDUjEln5bhkm7GgMJVFyS7FpFM2EQnNWAisqjBSedirqjhJHfaaBjuhYrYhGB+USzGJfi+OUCU+LIy9NEKlBemcxkMRV/BsYw+UzIuzXgCldkAJHfMNQX5VvIn4MHFRUc4WeS5YZXfCYVfQcg7RxEnmQGs6aEXD3KUGfcE2uaKC/jfYPq0F/Qbbp7Wg5xv0vKB/xe3TWtDzDbprhq8Sfpgo549HyFyQ/jStmerG/v9LpR3Wd0Gpwj9rho9NMxYsl2NSjTchSiXu5Ep8D86X0L+q4TiVRy2hoSpKUkdtTUd1JYeZC0Emo4dNI8TuItwx0wjRGLqXCdefahh9nkf42dcOcHNP0ui9EMQhdeE7C+AbG3DeovDcAQugQDeIcI3to5/lMMBUBIT5XM/RD3Q3BN+eTEIpGshaFjKGODynGEd4zUYdORU/WQ4W2+4ADRZTYZGO+w3BLXMKWyeET1XC+1NxeE4pMryhiNtclfZAlO+AAoh2QEzFg4Zg1owiU7TxziIohjj1XBWvWJgdIMCbcA5TO0AHkQZizX8zyJgyFC8L+g0K0FLQ8w16XtC/YgFaCvoNCnA1Bf0rFqCl4KY55ayRDxVCtiQOzymGjZcUcQUrtOseJgr/YTkQa578zhVniufOdOKzSxSeU4xaU4OnfDLxJoTJ1UUvN/ix2IfM0SzSx/PYPJ4ThufSRzNIs16+hJmGe7wBfogw2/UcfcGthqCHn781AQSrxMzkmAAAAABJRU5ErkJggg==' $Logos['msi'] = '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' $Logos['nvidia'] = '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' $Logos['opendns'] = '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' $Logos['quad9'] = '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' $Logos['raphire'] = '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' $Logos['snappy'] = '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' $Logos['techpowerup'] = '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' $Logos['threadpilot'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAXLSURBVFhH7Zh5TFRXFMafWyuVgDbVxqVNbG1VUEOLC2oToqbuLCpbIbi11tZgo1XbNI17baPV1rrBH2KgFcHUDRcMalUiVQtqFVFBFBBRQCiMo1DqvHu+5t6ZN3lzZwZmLDZtwpec8N6555774y7nvTeK0qpW/Q8EoCMRddIMwAv666asoqLCLsbS10Mex20RUSwRnSKiO4yxe4yxciISJl/r75sznouIyogoi4jel8d1SUQUj39JjLFdANrKDE6lqupMrTMROTW99PdNtTmTqqrzZQ6HAtAGwAXeSQZqCeOqe2jEwV/OIb+oxOpjjOW7NItE5MUYq2lpQE1rEtLQfdQMKL3fRfzuDKvfMqa3zGMnAC8RUW1LAOpzaErYfRTKq2Og9J+M07l5esBqg8HQReaxEwdkjLkFqJfcpo95UGvAoNA4BEQvxtg5S1F8t8LajzH2AEBnmcdO7s6gpuKy+3jyxGS9l2PqGxrhNyUOvsHz8Ki+wSaG65kAcqkqQ9yaBCh9J8EnJA5ZuVdtIC2DY8zsL9EjcDoqqkVqLUCXR+WALbMHNZXcq8SQ8AXwCohE4r7jCPt0LZQ3JiDuq3gYH5tniStq8Tp4+ofhZuk9ce8oH2OsqkUANR3JyoGn/zQMDl+AkvJKqz/l0Cl0GRaJXqNn4eiZC1i4bjva+gYh52qhaJfzuQ1IRF0ZY3WOkmlasWUnlNfH4eOVW6EyZvVrMqkmfLB8s1j2Dn5TcezsJeGX80mAri2xM0CuGoMRE+YuQ9v+k5CcfsIKVHa/CjsPncTn3yUJ+znzDGrqDMgrLEZ5ZXWTcHrAurq65g8JByQiK6Cmc1duoGdgLF4bOxuFpeXCl33pGmK/+A4vB86AMiAYiq/FBgSjW+AMzF25FTl5BdYc2qGQjcvlUywDmlQVm1MOQek7ERELvxHJeP2KWLQWHd6eBmVACDwD3oNnQBSUgcFQBvL7KOHjbe39piH0k69x6fotHadjQJdm0FKoBSBXYclddA6IwsYf08X9hqT98BpuHtxreDQ6j4wRQN1HzcT3yQew8ad09Bg9S/h4m9eIaAHdaWgkVmxLFSVHhtQAXdqDRqPRZg+aTCbUPjSisfEvBM9fDaXfZHQaFoUu78QIAG58STmYpk0pB4VPa+exvA/vO+7D5aisMddCPSARPd0p5vqzsREjYz8Tz09tUL3x2VyftM8KuCF5v/DJcSLWJwgBMUtQazBaIf8xYNGdcrTzmyJmQR7Qe4R5droGTseqhFSsik9Dt8Dpwuc9IhreUjz3txkUioLiMhvAp6qDWgJuy7fuEkuk+AZZTmqI2Fvt/Kbief8w8Q8ofcYLa2/xtX9rKpRBoeZYfsp9gqD0m4RlW1Ic7UH3AfUJuBL3HsOibxORsDsD+06cRWb2RfyWV4i8myW4dusObtzmViau84tKcfF6EU6ev4z0k+exfe8xLFm/A9v3ZFrzPRWgfEhkyIoHf+DqzVJk5ebhaPZF7DmejeQDxwV0fNoRbLNY4p5MpGacxuGsXAF5ueA27leJ92AbOB2ga6fY0QxqSYgY/CMWiEcY30d8iW0KtJ3xmFBzbD/+tjNP1FVHud0q1I4AtUR8ppQ3J8BjaKTdgXFmosT0GY91O/bawekA+TOx+TfqpgC1ZLwge/JBfYLQcUiEKMYyFD/BHkMixEx6+IdjdUKaQzgdYA0RvSjz2Mny0SSe8HIiLRkX34cfrdqGPhPnouPgcPNya0s7MATP+Yeh9/g5mLX0B1zIL7L2k/PpAV3ag/yzkzGW4yyZDPrw0WOcv1KA1Iws8TjcmHwAOw+fwq+/Xxefl3rJOSTAay59dnIRUUxzSUViHWhTkvvJcJaYOJmjSRHRJptRnqEYY0ny+C6JiKIZY/zHoyoieswYq3dkvE0zxpjTOFVVGxhj3HifaiI6S0Rz5HHdFq9PRNSDiHrW19f34n/dMB5vtYaGhle436WS0qpW/Qf0N++F1Qa58XQnAAAAAElFTkSuQmCC' $Logos['valleyofdoom'] = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANwSURBVFhH7ZnfUxJRHMX9U81s8kfmlOVMTdNTb1mN5UP286G3ml56KlFQNDN/wIKmMCCiCP4EdhcEM6fTnGuXlstuCurgAw/nAWbP9372cvd8712adF2PFQqFTDabvVAiE9madF3PHx4eolAoXCiRiWxNf2mR1XUUTAM/cyb26ySOXTBNgglIspUA90wDXyIJPPdH8CYQrYsG/RF8Cq8iZxgoqoCkJ9wllw+dHq0uanX50De9JCarApBTzLvghbe8wbqoy6Ph2Vy4AVizjgV8HYii3a3h5liwLup0a3g6+x/At4EoukY19I4H66LuUQ0DTjNo6DqSu2nEtnaxsl0fcezETlqwVOQgw5H5Q/p6Km8Y9kHNLy+SGoCnVVWAXLSymZcpb6KYO2ruquTm4yBv48uZoqbqserEgCyUzmbxfW0DX+MpTK7+00Q8icD6Jkyj0scH7kdqC+PxZJlnMp7Ct9UUtjNZW1/VgBxoI50RSd/m9uOaRyupddiHRzNHzV2dEbn5aBn2lXnYCK6Paoht7wqfOl5NgJvpDO59XcCNsYBja1IBnVonOwZDmbnXAGwAnhSQD0mPN4irI350uLWSWlxzeDITwu+9XMVZBsU8XmoRNLvmyjxtI0cPy5k9JDJmPLF1DEUTcFnkXl7Hx6W4AFHPFy+0KD4srsAdWy/zsMbwcgJb6czZxIyE5Awd5HMieKVQ3MN0YgMtNueY5iGfuAHs75V5pNQloaoqQCcRmuHLn8y6zij+nJwxwqi+k6gBeC6ApmGIp9ZOagHqNIBqfSky2AJy0e5ksiJSmHuquDtRB6kVkLXU+hTH3s5k7AG5bXo3vyyKM5Sl7k4s4P7kAuI2uVULIGeJEfNgahF3JubLxur1BsXrD45TcWhiuL7SImLHwo4h1T0aQI83YJv8tQJytgjHXY11rA63H/2zIWfAalvTaQCPa50NwHMB5AK9POwTF0pxIJ747Zr7Qc4UW3rurK0eiu3vc2QNvxwAb3uDaHf7yzxXxA7dYQ3yzSZfHvbNhMRdSPXPhTHgC4sTf14BLJomtOSmKGr1UA+nQ5haTYkbt3qYc4ySQS0ials9j2dCeL+4IsapAKSZp3qexHgHUvKzU3PnjkT1SJ8MXTtZa1s9chJKOWh9iU5qJ4lZdpB67Wk80ld6iX7R/4b4A+uNRwiZ2KF8AAAAAElFTkSuQmCC' $Logos['wagnardsoft'] = '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' $Logos['stop-it'] = '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' # ===== 00-noyau.ps1 ===== # --------------------------------------------------------------------------- # Noyau : où on est, élévation, détection machine, outils d'écriture avec retour arrière. # --------------------------------------------------------------------------- $Depot = 'https://bagarre.mtsu.dev' # un Worker Cloudflare (worker/) qui rend le dépôt GitHub : "/" = bagarre.ps1, le reste tel quel $Version = '8.0' $ErrorActionPreference = 'Continue' # État partagé avec les gestionnaires d'événements de la fenêtre. Une table, jamais $script: : # selon le lancement (-File, "irm | iex", scriptblock) le préfixe $script: ne désigne pas la même portée, # alors qu'une lecture sans préfixe et une écriture dans cette table marchent dans les trois cas. # Simulation : quand $Bagarre.Simulation est vrai, les fonctions d'écriture n'écrivent rien et notent dans $Bagarre.Verif # si la valeur en place est déjà celle visée. C'est ainsi que la fenêtre détecte ce qui est déjà fait. $Bagarre = @{ Langue = 'fr'; L = $null; ConsoleN = 0; ConsoleProc = $null; DnsAdapt = $null; DnsResultats = @(); DnsChoix = -1; DnsSecours = -1; DnsMeilleur = -1; Simulation = $false; Verif = $null; Cartes = @(); RelancerExplorer = $false } # Lancé depuis un clone (powershell -File bagarre.ps1) : les images sont à côté. # Lancé par "irm ... | iex" : $Here est vide, elles sont ouvertes depuis $Depot. $Here = if ($Depuis) { $Depuis } elseif ($PSCommandPath -and (Test-Path (Join-Path (Split-Path -Parent $PSCommandPath) 'images'))) { Split-Path -Parent $PSCommandPath } else { $null } # Admin et thread STA (la fenêtre en a besoin). Sinon on se relance élevé, et on rend la main. # -Liste et -Capture (modes de test) tournent sans admin. # La relance passe par une copie locale du script (UTF-8 avec BOM, lisible par -File) : pas de "irm | iex" ni de # fenêtre cachée sur la ligne de commande élevée, Defender classe ce motif en cheval de Troie (Commando.A!ml, vu le 2026-09-13). $EstAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) $EstSta = [Threading.Thread]::CurrentThread.GetApartmentState() -eq 'STA' if (-not $Liste -and -not $Capture -and -not $Essai -and (-not $EstAdmin -or -not $EstSta)) { try { $texte = if ($PSCommandPath) { [IO.File]::ReadAllText($PSCommandPath, [Text.Encoding]::UTF8) } else { irm "$Depot/bagarre.ps1" } $copie = Join-Path $env:TEMP 'bagarre\bagarre.ps1' if (-not (Test-Path (Split-Path $copie))) { New-Item -Path (Split-Path $copie) -ItemType Directory -Force | Out-Null } [IO.File]::WriteAllText($copie, ([string]$texte).TrimStart([char]0xFEFF), (New-Object Text.UTF8Encoding $true)) $arguments = "-NoProfile -ExecutionPolicy Bypass -STA -File `"$copie`"" if ($Here) { $arguments += " -Depuis `"$Here`"" } Start-Process powershell -Verb RunAs -ArgumentList $arguments Write-Host "`n La fenêtre bagarre s'ouvre en administrateur (une console l'accompagne, laisse-la). Tu peux fermer celle-ci.`n" -ForegroundColor Green } catch { Write-Host "`n Élévation refusée : bagarre a besoin des droits administrateur pour régler Windows.`n" -ForegroundColor Yellow } return } # État et journal : ProgramData en admin (le vrai usage), le profil sinon (modes de test). $Dossier = if ($EstAdmin) { Join-Path $env:ProgramData 'bagarre' } else { Join-Path $env:LOCALAPPDATA 'bagarre' } if (-not (Test-Path $Dossier)) { New-Item -Path $Dossier -ItemType Directory -Force | Out-Null } $EtatFichier = Join-Path $Dossier 'bagarre-avant.json' $LogFichier = Join-Path $Dossier 'bagarre.log' # Langue de la fenêtre et de la console : celle choisie par un clic sur un drapeau la dernière fois, # sinon la langue d'affichage de Windows (Get-UICulture, pas Get-Culture qui est le format des dates). $LangueFichier = Join-Path $Dossier 'langue.txt' $Bagarre.Langue = if ((Test-Path $LangueFichier) -and ((Get-Content $LangueFichier -Raw).Trim() -in 'fr', 'en')) { (Get-Content $LangueFichier -Raw).Trim() } elseif ((Get-UICulture).TwoLetterISOLanguageName -eq 'fr') { 'fr' } else { 'en' } # Les phrases écrites dans la console avant que la fenêtre existe ou hors de la fenêtre (application, restauration, # téléchargements). Les lignes techniques (registre, service, tâche, réseau, alim) gardent leurs mots-clés français : # c'est le journal, on le lit avec le catalogue à côté. Msg 'cle' rend la phrase dans la langue courante. $Messages = @{ fr = @{ rienRestaurer = 'Rien à restaurer : bagarre-avant.json est vide.'; restauration = 'Restauration de {0} réglages...' restaure = 'restauré {0}'; echecRestauration = 'ÉCHEC restauration {0} : {1}'; finRestauration = 'Terminé. Redémarre pour que tout reprenne effet.' rienCoche = 'Rien de coché.'; application = 'Application de {0} réglages...'; echecItem = 'ÉCHEC {0} : {1}' finApplication = 'Terminé. Les valeurs d''avant sont dans {0}, le détail dans {1}. Redémarre le PC.' rapportEcrit = 'Rapport écrit : {0} ({1} Ko)'; fenetreFermee = 'fenêtre fermée' consoleOk = 'Terminé sans erreur, cette console se ferme.'; consoleErreur = 'Il y a eu une erreur, lis ce qui est au-dessus. Entrée pour fermer.' consoleFini = 'Terminé.'; consoleOccupee = 'La console est encore occupée, celle-ci part dans sa propre fenêtre.' } en = @{ rienRestaurer = 'Nothing to restore: bagarre-avant.json is empty.'; restauration = 'Restoring {0} settings...' restaure = 'restored {0}'; echecRestauration = 'FAILED restore {0}: {1}'; finRestauration = 'Done. Reboot so everything takes effect again.' rienCoche = 'Nothing checked.'; application = 'Applying {0} settings...'; echecItem = 'FAILED {0}: {1}' finApplication = 'Done. The previous values are in {0}, the detail in {1}. Reboot the PC.' rapportEcrit = 'Report written: {0} ({1} KB)'; fenetreFermee = 'window closed' consoleOk = 'Finished without error, this console closes.'; consoleErreur = 'Something failed, read what is above. Enter to close.' consoleFini = 'Done.'; consoleOccupee = 'The console is still busy, this one opens in its own window.' } } function Msg($cle) { $Messages[$Bagarre.Langue][$cle] } # --------------------------------------------------------------------------- # Détection machine (sert aux valeurs automatiques et aux explications) # --------------------------------------------------------------------------- $RamGo = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB) # Carte graphique : la carte dédiée compte, pas l'iGPU du processeur. NVIDIA ne fait pas d'iGPU sur PC fixe, chez AMD # la dédiée s'appelle "Radeon RX" ou "Radeon PRO" (l'iGPU est "Radeon Graphics", "Vega", "780M"), chez Intel c'est "Arc". # -Amd (mode de test) simule une carte AMD dédiée pour voir la page AMD sur un PC NVIDIA. $Cartes = @(Get-CimInstance Win32_VideoController | ForEach-Object { $_.Name }) $Dediee = $Cartes | Where-Object { $_ -match 'NVIDIA|GeForce' } | Select-Object -First 1 if (-not $Dediee) { $Dediee = $Cartes | Where-Object { $_ -match 'Radeon (RX|PRO)' } | Select-Object -First 1 } if (-not $Dediee) { $Dediee = $Cartes | Where-Object { $_ -match 'Intel.*Arc' } | Select-Object -First 1 } if ($Amd) { $Dediee = 'AMD Radeon RX (simulée par -Amd)' } $Gpu = if ($Dediee) { $Dediee } else { $Cartes | Select-Object -First 1 } $EstNvidia = [bool]($Dediee -match 'NVIDIA|GeForce') $EstAmd = [bool]($Dediee -match 'Radeon') # Processeur : les groupes "Processeur Intel" et "Processeur AMD" du script n'apparaissent que sur la marque détectée. $Cpu = Get-CimInstance Win32_Processor | Select-Object -First 1 $CpuNom = if ($Cpu.Name) { ($Cpu.Name -replace '\s+', ' ').Trim() } else { 'CPU inconnu' } $EstIntelCpu = [bool]($Cpu.Manufacturer -match 'Intel') $EstAmdCpu = [bool]($Cpu.Manufacturer -match 'AMD') $EstPortable = (Get-CimInstance Win32_SystemEnclosure).ChassisTypes | Where-Object { $_ -in 8, 9, 10, 11, 12, 14, 18, 21, 30, 31, 32 } $DisqueSysteme = Get-PhysicalDisk | Where-Object { $_.DeviceId -eq ((Get-Partition -DriveLetter $env:SystemDrive[0]).DiskNumber) } | Select-Object -First 1 $EstHdd = $DisqueSysteme -and $DisqueSysteme.MediaType -eq 'HDD' $Machine = "$CpuNom, $RamGo Go RAM, $Gpu, disque système $(if ($EstHdd) { 'HDD' } else { 'SSD' })$(if ($EstPortable) { ', portable' })" # Âge de l'installation de Windows : au-delà d'un mois la fenêtre propose de se protéger avant de toucher (point de restauration, sauvegarde). $InstallDate = try { (Get-CimInstance Win32_OperatingSystem).InstallDate } catch { $null } $InstallJours = if ($InstallDate) { [int]((Get-Date) - $InstallDate).TotalDays } else { 0 } # --------------------------------------------------------------------------- # Outils : lire, écrire, mémoriser pour le retour arrière # --------------------------------------------------------------------------- $Avant = @{} if (Test-Path $EtatFichier) { $json = Get-Content $EtatFichier -Raw | ConvertFrom-Json foreach ($p in $json.PSObject.Properties) { $Avant[$p.Name] = $p.Value } } function Log($texte) { if ($Bagarre.Simulation) { return } $ligne = "{0} {1}" -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $texte Add-Content -Path $LogFichier -Value $ligne Write-Host " $texte" -ForegroundColor DarkGray Rafraichir } # Laisse la fenêtre se redessiner pendant une action longue (tout tourne sur le thread de la fenêtre). Sans ça, passé 5 s # Windows la déclare "ne répond pas" et affiche une copie figée par-dessus. À appeler dans toute boucle qui dure. function Rafraichir { if ($Fenetre -and $Fenetre.IsLoaded) { $Fenetre.Dispatcher.Invoke([Action] {}, [Windows.Threading.DispatcherPriority]::Background) } } function Memoriser($cle, $valeur) { if ($Bagarre.Simulation) { return } if (-not $Avant.ContainsKey($cle)) { $Avant[$cle] = $valeur } } function SauverEtat { $Avant | ConvertTo-Json -Depth 4 | Set-Content -Path $EtatFichier -Encoding UTF8 } function Reg-Lire($chemin, $nom) { try { (Get-ItemProperty -Path $chemin -Name $nom -ErrorAction Stop).$nom } catch { $null } } function Reg-Ecrire($chemin, $nom, $valeur, $type = 'DWord') { if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add(([string](Reg-Lire $chemin $nom)) -eq [string]$valeur); return } $id = "reg|$chemin|$nom" Memoriser $id @{ chemin = $chemin; nom = $nom; valeur = (Reg-Lire $chemin $nom); type = $type } if (-not (Test-Path $chemin)) { New-Item -Path $chemin -Force | Out-Null } New-ItemProperty -Path $chemin -Name $nom -Value $valeur -PropertyType $type -Force | Out-Null Log "registre $chemin\$nom = $valeur" } function Reg-Supprimer($chemin, $nom) { if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add($null -eq (Reg-Lire $chemin $nom)); return } $id = "reg|$chemin|$nom" Memoriser $id @{ chemin = $chemin; nom = $nom; valeur = (Reg-Lire $chemin $nom); type = 'DWord' } Remove-ItemProperty -Path $chemin -Name $nom -ErrorAction SilentlyContinue Log "registre $chemin\$nom supprimé" } function Service-Couper($nom, $description) { $svc = Get-Service -Name $nom -ErrorAction SilentlyContinue if (-not $svc) { Log "service $nom absent sur cette machine, ignoré"; return } $chemin = "HKLM:\SYSTEM\CurrentControlSet\Services\$nom" $start = Reg-Lire $chemin 'Start' if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add($start -eq 4); return } Memoriser "svc|$nom" @{ nom = $nom; start = $start } if ($svc.Status -eq 'Running') { Stop-Service -Name $nom -Force -ErrorAction SilentlyContinue } # Écriture directe du type de démarrage : Set-Service refuse certains services protégés. Set-ItemProperty -Path $chemin -Name 'Start' -Value 4 -ErrorAction SilentlyContinue Log "service $nom désactivé ($description)" } # Service en démarrage manuel (il ne part plus tout seul, mais reste disponible) function Service-Manuel($nom, $description) { $svc = Get-Service -Name $nom -ErrorAction SilentlyContinue if (-not $svc) { return } $chemin = "HKLM:\SYSTEM\CurrentControlSet\Services\$nom" $start = Reg-Lire $chemin 'Start' if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add($start -eq 3); return } Memoriser "svc|$nom" @{ nom = $nom; start = $start } Set-ItemProperty -Path $chemin -Name 'Start' -Value 3 -ErrorAction SilentlyContinue Log "service $nom en manuel ($description)" } function Tache-Couper($chemin, $nom) { $t = Get-ScheduledTask -TaskPath $chemin -TaskName $nom -ErrorAction SilentlyContinue if (-not $t) { return } if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add([string]$t.State -eq 'Disabled'); return } Memoriser "task|$chemin$nom" @{ chemin = $chemin; nom = $nom; etat = [string]$t.State } Disable-ScheduledTask -TaskPath $chemin -TaskName $nom -ErrorAction SilentlyContinue | Out-Null Log "tâche $chemin$nom désactivée" } # Cartes réseau physiques actives (pas les cartes virtuelles VPN / VMware / Bluetooth). # La liste est gardée après le premier appel : changer une propriété avancée réinitialise la carte, qui n'est plus "Up" # pendant une ou deux secondes, et les items réseau suivants ne voyaient aucune carte (vu sur le PC du mainteneur le 2026-09-13). function Cartes-Reseau { if ($Bagarre.Cartes.Count -eq 0) { $Bagarre.Cartes = @(Get-NetAdapter -Physical -ErrorAction SilentlyContinue | Where-Object { $_.Status -eq 'Up' -and $_.InterfaceDescription -notmatch 'Bluetooth|Virtual|VMware|Hyper-V|TAP|WireGuard|Tailscale' }) } $Bagarre.Cartes } # Attend que la carte soit revenue après une réinitialisation (au plus 15 s), la fenêtre reste vivante pendant ce temps. function Net-Attendre($carte) { for ($i = 0; $i -lt 30; $i++) { $a = Get-NetAdapter -Name $carte.Name -ErrorAction SilentlyContinue if ($a -and $a.Status -eq 'Up') { return } Start-Sleep -Milliseconds 500 Rafraichir } } function Net-Liaison-Couper($carte, $composant, $description) { $b = Get-NetAdapterBinding -Name $carte.Name -ComponentID $composant -ErrorAction SilentlyContinue if (-not $b) { Log "réseau $($carte.Name) : $description introuvable, ignoré"; return } if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add(-not [bool]$b.Enabled); return } Memoriser "netb|$($carte.Name)|$composant" @{ carte = $carte.Name; composant = $composant; actif = [bool]$b.Enabled } Disable-NetAdapterBinding -Name $carte.Name -ComponentID $composant -ErrorAction SilentlyContinue Log "réseau $($carte.Name) : $description décoché" } function Net-Propriete-Regler($carte, $motif, $valeur, $description) { $props = Get-NetAdapterAdvancedProperty -Name $carte.Name -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match $motif } foreach ($p in $props) { $choix = $p.ValidDisplayValues | Where-Object { $_ -match $valeur } | Select-Object -First 1 if (-not $choix) { continue } # la propriété n'a pas cette valeur (autre pilote, autre libellé) : rien à faire if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add([string]$p.DisplayValue -eq [string]$choix); continue } if ([string]$p.DisplayValue -eq [string]$choix) { Log "réseau $($carte.Name) : $($p.DisplayName) déjà sur $choix"; continue } Memoriser "netadv|$($carte.Name)|$($p.RegistryKeyword)" @{ carte = $carte.Name; mot = $p.RegistryKeyword; valeur = [string]$p.RegistryValue } Set-NetAdapterAdvancedProperty -Name $carte.Name -RegistryKeyword $p.RegistryKeyword -DisplayValue $choix -ErrorAction SilentlyContinue Log "réseau $($carte.Name) : $($p.DisplayName) = $choix ($description)" Net-Attendre $carte } } # Alias powercfg (SUB_PROCESSOR, PERFBOOSTMODE...) -> GUID, d'après "powercfg /aliases". Un GUID passe tel quel. function Powercfg-Guid($nom) { if ($nom -match '^[0-9a-f]{8}-') { return $nom } if (-not $Bagarre.ContainsKey('PowercfgAlias')) { $t = @{} foreach ($l in (powercfg /aliases 2>$null)) { if ($l -match '^\s*([0-9a-f-]{36})\s+(\S+)') { $t[$Matches[2]] = $Matches[1] } } $Bagarre.PowercfgAlias = $t } if ($Bagarre.PowercfgAlias[$nom]) { $Bagarre.PowercfgAlias[$nom] } else { $nom } } # Les réglages cachés (PERFBOOSTMODE, CPMINCORES) ne sortent pas de "powercfg /query" : leur valeur est lue dans le registre # du plan actif, et si la clé n'existe pas c'est le défaut de Windows (mémorisé comme $null, la restauration supprime la clé). function Powercfg-Regler($sousGroupe, $reglage, $valeur, $description) { $id = "pwr|$sousGroupe|$reglage" $plan = ((powercfg /getactivescheme 2>$null) -join ' ') -replace '.*?([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}).*', '$1' $cle = "HKLM:\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\$plan\$(Powercfg-Guid $sousGroupe)\$(Powercfg-Guid $reglage)" $lu = (powercfg /query SCHEME_CURRENT $sousGroupe $reglage 2>$null | Select-String 'Index du paramètre d.alimentation CA actuel|Current AC Power Setting Index') $avantVal = if ($lu) { [Convert]::ToInt32(($lu -split ':')[-1].Trim(), 16) } elseif (Test-Path $cle) { (Get-ItemProperty $cle -ErrorAction SilentlyContinue).ACSettingIndex } else { $null } if ($Bagarre.Simulation) { [void]$Bagarre.Verif.Add(($null -ne $avantVal) -and ($avantVal -eq [int]$valeur)); return } Memoriser $id @{ sousGroupe = $sousGroupe; reglage = $reglage; valeur = $avantVal; cle = $cle } powercfg /setacvalueindex SCHEME_CURRENT $sousGroupe $reglage $valeur | Out-Null powercfg /setdcvalueindex SCHEME_CURRENT $sousGroupe $reglage $valeur | Out-Null powercfg /setactive SCHEME_CURRENT | Out-Null Log "alim $description = $valeur" } # --------------------------------------------------------------------------- # Fichiers du dépôt (images) et lancement de commandes dans leur propre console # --------------------------------------------------------------------------- function Ouvrir($url) { Start-Process $url | Out-Null } function Image-Ouvrir($nom) { if ($Here -and (Test-Path (Join-Path $Here "images\$nom"))) { Ouvrir (Join-Path $Here "images\$nom") } else { Ouvrir "$Depot/images/$nom" } } # Les petites images embarquées par build.ps1 ($Logos, base64) en BitmapImage, une seule fois chacune. $LogoCache = @{} function Logo-Image($nom) { if ($LogoCache.ContainsKey($nom)) { return $LogoCache[$nom] } $bi = $null if ($Logos[$nom]) { try { $flux = New-Object IO.MemoryStream (, [Convert]::FromBase64String($Logos[$nom])) $bi = New-Object Windows.Media.Imaging.BitmapImage $bi.BeginInit(); $bi.StreamSource = $flux; $bi.CacheOption = 'OnLoad'; $bi.EndInit(); $bi.Freeze() } catch { $bi = $null } } $LogoCache[$nom] = $bi $bi } # Lance une commande PowerShell dans une console (visible, admin comme nous). # Sert à tout ce qui est interactif ou bavard : winget, Win11Debloat, WinUtil, DISM. # Par défaut, une console à part qui reste ouverte. -Fermer (installations) : elle se ferme toute seule si tout s'est # bien passé, et reste ouverte sur une erreur (exception PowerShell, ou code de sortie non nul d'un exe ; la commande # pose $Echec = $true pour le reste). # -Ici : pas de nouvelle fenêtre, la commande tourne dans la console qui accompagne la fenêtre (celle de la relance admin), # en processus fils qui partage la console, la fenêtre reste vivante. Pour les commandes courtes et non interactives # (fsutil, powercfg, DISM nettoyage, rapport Wi-Fi, point de restauration). Une seule à la fois : si la précédente # tourne encore, celle-ci part dans sa propre fenêtre. Les outils interactifs (Win11Debloat, WinUtil, winget, # l'enregistrement Defender qui attend Entrée) gardent leur console à part. # La commande passe par un petit .ps1 dans le dossier bagarre, pas par -EncodedCommand (motif suspect pour Defender). $Bagarre.ConsoleN = 0 # Un texte posé entre apostrophes dans le script d'une console : l'apostrophe s'y double. function Echapper($texte) { ([string]$texte) -replace "'", "''" } function Console-Lancer($titre, $commande, [switch]$Fermer, [switch]$Ici) { $Bagarre.ConsoleN++ if ($Ici -and $Bagarre.ConsoleProc -and -not $Bagarre.ConsoleProc.HasExited) { Log (Msg 'consoleOccupee'); $Ici = $false } $fin = if ($Ici) { "if (`$Echec) { Write-Host ''; Write-Host ' $(Echapper (Msg 'consoleErreur'))' -ForegroundColor Yellow }`r`nelse { Write-Host ''; Write-Host ' $(Echapper (Msg 'consoleFini'))' -ForegroundColor Green }`r`nWrite-Host ''" } elseif ($Fermer) { "if (`$Echec) { Write-Host ''; Write-Host ' $(Echapper (Msg 'consoleErreur'))' -ForegroundColor Yellow; [void](Read-Host) }`r`nelse { Write-Host ''; Write-Host ' $(Echapper (Msg 'consoleOk'))' -ForegroundColor Green; Start-Sleep 2 }" } else { "if (`$Echec) { Write-Host ''; Write-Host ' $(Echapper (Msg 'consoleErreur'))' -ForegroundColor Yellow }" } $entete = if ($Ici) { '' } else { "`$Host.UI.RawUI.WindowTitle = 'bagarre : $(Echapper $titre)'`r`n" } $texte = @" ${entete}Write-Host '' Write-Host ' $(Echapper $titre)' -ForegroundColor Cyan Write-Host '' `$Echec = `$false try { $commande } catch { Write-Host `$_ -ForegroundColor Red; `$Echec = `$true } if (`$LASTEXITCODE) { `$Echec = `$true } $fin "@ $fichier = Join-Path $Dossier ("console-{0}.ps1" -f $Bagarre.ConsoleN) [IO.File]::WriteAllText($fichier, $texte, (New-Object Text.UTF8Encoding $true)) if ($Ici) { $Bagarre.ConsoleProc = Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$fichier`"" -NoNewWindow -PassThru } else { $sortie = if ($Fermer) { '' } else { '-NoExit ' } Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass $sortie-File `"$fichier`"" | Out-Null } Log "console $titre" } # Une console par installation, fermée si winget a réussi. Le code -1978335189 (0x8A15002B) veut dire # "déjà installé, pas de mise à jour disponible" : pas une erreur pour nous. function Winget-Installer($titre, [string[]]$ids, $source) { $src = if ($source) { " --source $source" } else { '' } $cmd = ($ids | ForEach-Object { "winget install --id '$_' -e$src --accept-package-agreements --accept-source-agreements; if (`$LASTEXITCODE -and `$LASTEXITCODE -ne -1978335189) { `$Echec = `$true }; `$global:LASTEXITCODE = 0" }) -join "`r`n" Console-Lancer $titre $cmd -Fermer } # Raccourci sur le Bureau public et dans le menu Démarrer de tous les comptes, pour les outils posés sans raccourci # (ISLC par winget, Snappy par zip). Le Bureau public reste visible même si l'élévation s'est faite avec un autre compte. # Ce code est collé en tête du script de console, qui tourne dans son propre processus. $RaccourciCode = @' function Raccourci($nom, $exe) { $shell = New-Object -ComObject WScript.Shell foreach ($dossier in [Environment]::GetFolderPath('CommonDesktopDirectory'), [Environment]::GetFolderPath('CommonPrograms')) { $chemin = Join-Path $dossier "$nom.lnk" $lien = $shell.CreateShortcut($chemin) $lien.TargetPath = $exe $lien.WorkingDirectory = Split-Path -Parent $exe $lien.IconLocation = "$exe,0" $lien.Save() Write-Host " -> $chemin" } } '@ # ===== 10-catalogue.ps1 ===== $Items = New-Object System.Collections.ArrayList function Ajouter($groupe, $id, $titre, $pourquoi, $coche, $attention, $appliquer) { [void]$Items.Add([pscustomobject]@{ Groupe = $groupe; Id = $id; Titre = $titre; Pourquoi = $pourquoi Coche = $coche; Attention = $attention; Appliquer = $appliquer }) } # ----- Services : ce qui tourne en fond pour rien ----------------------------- $G = 'Services Windows' Ajouter $G 'svc-telemetrie' 'Télémétrie Microsoft (DiagTrack, dmwappushservice)' ` 'Envoie ton usage à Microsoft en continu. Aucun rôle pour toi.' $true '' { Service-Couper 'DiagTrack' 'télémétrie' Service-Couper 'dmwappushservice' 'routage télémétrie' } Ajouter $G 'svc-geoloc' 'Géolocalisation (lfsvc)' ` 'Position GPS pour les applis du Store. Un PC fixe ne bouge pas.' $true 'Les applis météo / cartes ne te localisent plus, et le fuseau horaire automatique ne marche plus : règle-le une fois dans Paramètres > Heure et langue.' { Service-Couper 'lfsvc' 'géolocalisation' } Ajouter $G 'svc-phone' 'Téléphonie (PhoneSvc)' ` 'Sert à Phone Link pour passer des appels depuis le PC.' $true 'Phone Link (Mobile connecté) perd les appels.' { Service-Couper 'PhoneSvc' 'téléphonie' } Ajouter $G 'svc-maps' 'Cartes hors ligne (MapsBroker)' ` 'Télécharge des cartes pour l''appli Cartes. Personne ne l''utilise.' $true '' { Service-Couper 'MapsBroker' 'cartes hors ligne' } Ajouter $G 'svc-demo' 'Mode démo magasin (RetailDemo)' ` 'Le mode vitrine des PC en rayon.' $true '' { Service-Couper 'RetailDemo' 'mode démo' } Ajouter $G 'svc-wer' 'Rapport d''erreurs Windows (WerSvc)' ` 'Envoie un rapport à Microsoft quand un programme plante.' $true 'Plus de rapport automatique quand une appli plante (tu peux toujours lire l''Observateur d''événements).' { Service-Couper 'WerSvc' 'rapport d''erreurs' } Ajouter $G 'svc-fax' 'Fax' ` 'Le service d''envoi de fax par modem. Un PC de jeu n''a pas de modem fax.' $true '' { Service-Couper 'Fax' 'fax' } Ajouter $G 'svc-compat' 'Assistant compatibilité des programmes (PcaSvc)' ` 'Surveille chaque lancement de vieux programme pour proposer un mode compatibilité.' $true 'Windows ne proposera plus de corriger un vieux programme tout seul.' { Service-Couper 'PcaSvc' 'assistant compatibilité' } Ajouter $G 'svc-xbox' 'Services Xbox (XblAuthManager, XblGameSave, XboxNetApiSvc)' ` 'Connexion Xbox Live, sauvegardes cloud Xbox, réseau Xbox.' $false 'Game Pass PC, l''appli Xbox et les jeux Microsoft Store ne se connectent plus. Laisse décoché si tu joues à un jeu Xbox / Game Pass.' { Service-Couper 'XblAuthManager' 'auth Xbox Live' Service-Couper 'XblGameSave' 'sauvegardes Xbox' Service-Couper 'XboxNetApiSvc' 'réseau Xbox' } Ajouter $G 'svc-edge' 'Mises à jour Edge en fond (edgeupdate, edgeupdatem)' ` 'Deux services qui vérifient Edge toutes les heures. Edge se met à jour tout seul à l''ouverture de toute façon.' $true '' { Service-Couper 'edgeupdate' 'maj Edge' Service-Couper 'edgeupdatem' 'maj Edge (machine)' } Ajouter $G 'svc-wmp' 'Partage réseau Windows Media Player (WMPNetworkSvc)' ` 'Diffuse ta bibliothèque WMP sur le réseau local.' $true '' { Service-Couper 'WMPNetworkSvc' 'partage WMP' } Ajouter $G 'svc-insider' 'Programme Windows Insider (wisvc)' ` 'Ne sert qu''à recevoir les versions bêta de Windows.' $true '' { Service-Couper 'wisvc' 'Windows Insider' } Ajouter $G 'svc-diag' 'Diagnostics automatiques (DPS, WdiServiceHost, WdiSystemHost)' ` 'Les utilitaires de résolution de problèmes automatiques. Ils tournent en permanence pour un usage très rare.' (-not $EstPortable) 'Le bouton Résoudre les problèmes dans les paramètres ne marchera plus tant que c''est coupé. Les pages Utilisation de la batterie et Utilisation des données restent vides : leur compteur (SRUM) tourne dans ce service.' { Service-Couper 'DPS' 'diagnostic policy' Service-Couper 'WdiServiceHost' 'diagnostic host' Service-Couper 'WdiSystemHost' 'diagnostic system host' } Ajouter $G 'svc-cdp' 'Plateforme appareils connectés (CDPSvc)' ` 'Partage de proximité, Phone Link, continuité entre appareils.' $true 'Partage de proximité et Phone Link ne marchent plus.' { Service-Couper 'CDPSvc' 'appareils connectés' } Ajouter $G 'svc-imprimante' 'Spouleur d''impression (Spooler)' ` 'Gère les imprimantes. Sans imprimante, il tourne pour rien.' $false 'Tu ne peux plus imprimer, même en PDF. Coche seulement si tu n''as jamais d''imprimante.' { Service-Couper 'Spooler' 'impression' } Ajouter $G 'svc-recherche' 'Indexation de la recherche (WSearch)' ` 'Construit un index de tes fichiers pour que la recherche du menu Démarrer soit instantanée. Sur SSD, l''indexation coûte très peu.' $false 'La recherche de fichiers dans Démarrer et l''Explorateur devient lente. Outlook aussi.' { Service-Couper 'WSearch' 'indexation' } Ajouter $G 'svc-sysmain' 'SysMain (ex Superfetch)' ` ('Précharge en RAM les programmes que tu lances souvent. Sur SSD il ne gêne pas, sur disque dur il peut faire ramer. ' + $(if ($EstHdd) { 'Ton disque système est un HDD : coche.' } else { 'Ton disque système est un SSD : laisse.' })) $EstHdd 'Les lancements de programmes ne sont plus préchargés.' { Service-Couper 'SysMain' 'sysmain' } Ajouter $G 'svc-bluetooth' 'Bluetooth (bthserv, BTAGService)' ` 'Tout ce qui est Bluetooth.' $false 'Plus aucun appareil Bluetooth : casque, manette, souris. Coche uniquement si tu n''en as aucun.' { Service-Couper 'bthserv' 'bluetooth' Service-Couper 'BTAGService' 'bluetooth audio' } Ajouter $G 'svc-delivery' 'Optimisation de la distribution : ne plus envoyer les mises à jour aux inconnus' ` 'Par défaut ton PC renvoie les mises à jour Windows qu''il a téléchargées à d''autres PC sur internet (du peer-to-peer). Ça prend de l''upload pendant que tu joues. On garde le téléchargement, on coupe l''envoi.' $true '' { Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization' 'DODownloadMode' 0 } # ----- Vie privée : ce que Windows envoie et affiche sans te demander ---------- $G = 'Vie privée et pubs' Ajouter $G 'priv-telemetrie' 'Télémétrie au minimum (AllowTelemetry, CEIP, rapports d''erreur, PowerShell)' ` 'Règle le niveau de données envoyées à Microsoft au plus bas. Honnêtement : sur Famille et Pro, AllowTelemetry=0 vaut 1 (le niveau "requis" reste), seules les éditions Entreprise et Éducation coupent tout. On coupe aussi le programme d''amélioration (CEIP), l''envoi des rapports de plantage, les demandes d''avis et la télémétrie de PowerShell.' $true 'Les rapports de plantage ne partent plus chez Microsoft (ils restent lisibles dans l''Observateur d''événements).' { Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' 'AllowTelemetry' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' 'AllowDeviceNameInTelemetry' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' 'LimitDiagnosticLogCollection' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' 'LimitDumpCollection' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' 'DoNotShowFeedbackNotifications' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection' 'AllowTelemetry' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows' 'CEIPEnable' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\SQMClient\Windows' 'CEIPEnable' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting' 'Disabled' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\Windows Error Reporting' 'DontSendAdditionalData' 1 Reg-Ecrire 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' 'POWERSHELL_TELEMETRY_OPTOUT' '1' 'String' Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Privacy' 'TailoredExperiencesWithDiagnosticDataEnabled' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Siuf\Rules' 'NumberOfSIUFInPeriod' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' 'PublishUserActivities' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' 'UploadUserActivities' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' 'EnableActivityFeed' 0 } Ajouter $G 'priv-pub' 'Identifiant publicitaire, suggestions, section "Recommandé" de Démarrer, bouton Chat' ` 'Coupe l''ID de pub, les suggestions dans Démarrer et sa section "Recommandé", les conseils sur l''écran de verrouillage, les pubs dans l''Explorateur, l''installation silencieuse d''applis sponsorisées, les illustrations qui tournent dans la barre de recherche, le bouton Chat (Teams) de la barre des tâches et les astuces en ligne dans Paramètres.' $true 'La section "Recommandé" de Démarrer devient vide (les fichiers récents restent dans l''Explorateur).' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo' 'Enabled' 0 Reg-Ecrire 'HKCU:\Control Panel\International\User Profile' 'HttpAcceptLanguageOptOut' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'Start_TrackProgs' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'ShowSyncProviderNotifications' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement' 'ScoobeSystemSettingEnabled' 0 $cdm = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' foreach ($n in 'SubscribedContent-338393Enabled', 'SubscribedContent-353694Enabled', 'SubscribedContent-353696Enabled', 'SubscribedContent-338387Enabled', 'SubscribedContent-338389Enabled', 'SubscribedContent-310093Enabled', 'SubscribedContent-338388Enabled', 'SubscribedContent-314563Enabled', 'RotatingLockScreenOverlayEnabled', 'RotatingLockScreenEnabled', 'ContentDeliveryAllowed', 'OemPreInstalledAppsEnabled', 'PreInstalledAppsEnabled', 'PreInstalledAppsEverEnabled', 'SilentInstalledAppsEnabled', 'SoftLandingEnabled', 'SubscribedContentEnabled', 'FeatureManagementEnabled', 'SystemPaneSuggestionsEnabled') { Reg-Ecrire $cdm $n 0 } Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableWindowsConsumerFeatures' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableThirdPartySuggestions' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableConsumerAccountStateContent' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableCloudOptimizedContent' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableSoftLanding' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' 'HideRecommendedSection' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\SearchSettings' 'IsDynamicSearchBoxEnabled' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'TaskbarMn' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search' 'AllowCortana' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'NoCloudApplicationNotification' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer' 'AllowOnlineTips' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent' 'DisableTailoredExperiencesWithDiagnosticData' 1 } Ajouter $G 'priv-saisie' 'Personnalisation de la saisie et de la voix' ` 'Windows apprend ta frappe, ton écriture et ta voix pour les envoyer au cloud. Inutile hors Cortana.' $true '' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Speech_OneCore\Settings\OnlineSpeechPrivacy' 'HasAccepted' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Personalization\Settings' 'AcceptedPrivacyPolicy' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\InputPersonalization' 'RestrictImplicitInkCollection' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\InputPersonalization' 'RestrictImplicitTextCollection' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore' 'HarvestContacts' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TextInput' 'AllowLinguisticDataCollection' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Input\Settings' 'InsightsEnabled' 0 } Ajouter $G 'priv-fond' 'Applis du Store en arrière-plan' ` 'Empêche les applis du Store de tourner quand elles sont fermées.' $true 'Les notifications de ces applis (Mail, Météo) n''arrivent plus tant qu''elles sont fermées.' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications' 'GlobalUserDisabled' 1 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search' 'BackgroundAppGlobalToggle' 0 } Ajouter $G 'priv-copilot' 'Couper Copilot, Recall, Click to Do, les Widgets et l''IA de Bloc-notes / Paint' ` 'Copilot et les Widgets sont des processus qui restent en mémoire. Recall, quand il est actif, prend une capture d''écran toutes les quelques secondes et l''indexe : CPU et disque en permanence. Click to Do analyse l''écran à la demande. Les stratégies AllowRecallEnablement et DisableClickToDo sont celles documentées par Microsoft (policy CSP WindowsAI, 2025). On passe aussi le service de la pile IA (WSAIFabricSvc) en manuel et on coupe les boutons IA de Bloc-notes et Paint.' $true 'Plus de Copilot, plus de Recall, plus de Click to Do (Win+clic), plus de panneau météo / actus, plus de "Réécrire" dans le Bloc-notes ni de Cocreator dans Paint.' { Reg-Ecrire 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\WindowsCopilot' 'TurnOffWindowsCopilot' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsAI' 'DisableAIDataAnalysis' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsAI' 'AllowRecallEnablement' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\WindowsAI' 'AllowRecallEnablement' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsAI' 'DisableClickToDo' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Dsh' 'AllowNewsAndInterests' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\WindowsNotepad' 'DisableAIFeatures' 1 foreach ($n in 'DisableCocreator', 'DisableGenerativeFill', 'DisableImageCreator', 'DisableGenerativeErase', 'DisableRemoveBackground') { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Paint' $n 1 } Service-Manuel 'WSAIFabricSvc' 'pile IA, ne démarre plus tout seul' } Ajouter $G 'priv-taches' 'Tâches planifiées de télémétrie (Compatibility Appraiser, CEIP, Feedback, DiskDiagnostic)' ` 'Des tâches de fond qui analysent tes programmes installés et envoient le résultat à Microsoft, parfois en pleine partie (Compatibility Appraiser est connu pour ses pics disque).' $true '' { Tache-Couper '\Microsoft\Windows\Application Experience\' 'Microsoft Compatibility Appraiser' Tache-Couper '\Microsoft\Windows\Application Experience\' 'Microsoft Compatibility Appraiser Exp' Tache-Couper '\Microsoft\Windows\Application Experience\' 'ProgramDataUpdater' Tache-Couper '\Microsoft\Windows\Application Experience\' 'StartupAppTask' Tache-Couper '\Microsoft\Windows\Customer Experience Improvement Program\' 'Consolidator' Tache-Couper '\Microsoft\Windows\Customer Experience Improvement Program\' 'UsbCeip' Tache-Couper '\Microsoft\Windows\DiskDiagnostic\' 'Microsoft-Windows-DiskDiagnosticDataCollector' Tache-Couper '\Microsoft\Windows\Feedback\Siuf\' 'DmClient' Tache-Couper '\Microsoft\Windows\Feedback\Siuf\' 'DmClientOnScenarioDownload' Tache-Couper '\Microsoft\Windows\Windows Error Reporting\' 'QueueReporting' Tache-Couper '\Microsoft\Windows\Maps\' 'MapsUpdateTask' Tache-Couper '\Microsoft\Windows\Autochk\' 'Proxy' } Ajouter $G 'priv-assistance' 'Couper l''Assistance à distance' ` 'Permet à quelqu un de prendre la main sur ton PC via Windows. Personne ne s''en sert, et c''est une porte de moins.' $true 'Le bouton "Assistance rapide" Windows ne marche plus (Discord, AnyDesk, Parsec ne sont pas concernés).' { Reg-Ecrire 'HKLM:\SYSTEM\CurrentControlSet\Control\Remote Assistance' 'fAllowToGetHelp' 0 } Ajouter $G 'priv-sync' 'Synchronisation des paramètres avec le compte Microsoft' ` 'Arrête d''envoyer thème, mots de passe et paramètres sur le cloud Microsoft.' $true 'Tes paramètres ne suivent plus sur un autre PC connecté au même compte.' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\SettingSync' 'SyncPolicy' 5 foreach ($g in 'Personalization', 'BrowserSettings', 'Credentials', 'Accessibility', 'Windows') { Reg-Ecrire "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\SettingSync\Groups\$g" 'Enabled' 0 } } Ajouter $G 'priv-autorun' 'Couper l''exécution automatique des clés USB et disques (AutoRun / AutoPlay)' ` 'Une clé branchée ne lance plus rien toute seule. C est la recommandation de sécurité de base de Microsoft depuis 2011, encore ouverte par défaut pour la fenêtre "que voulez-vous faire ?".' $true 'Plus de fenêtre automatique quand tu branches une clé ou un téléphone : tu l''ouvres depuis l''Explorateur.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' 'NoDriveTypeAutoRun' 255 Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' 'NoAutorun' 1 Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' 'NoAutoplayfornonVolume' 1 } Ajouter $G 'priv-relance' 'Ne plus rouvrir les applis toutes seules après une mise à jour (ARSO)' ` 'Après un redémarrage de mise à jour, Windows se reconnecte tout seul et relance ce qui était ouvert. Un PC qui boot avec 15 fenêtres et le launcher de la veille.' $true 'Après une mise à jour tu retapes ton code PIN et tu rouvres tes applis toi-même.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' 'DisableAutomaticRestartSignOn' 1 } Ajouter $G 'priv-metadata' 'Ne plus télécharger les fiches et icônes des périphériques chez Microsoft' ` 'Chaque périphérique branché déclenche un téléchargement de son icône et de sa fiche depuis Microsoft. Purement cosmétique dans "Périphériques et imprimantes".' $false 'Les périphériques ont une icône générique.' { Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata' 'PreventDeviceMetadataFromNetwork' 1 } Ajouter $G 'priv-presse-papiers' 'Couper l''historique du presse-papiers (Win+V) et sa synchro cloud' ` 'Windows garde en mémoire tout ce que tu copies, mots de passe compris, et peut l''envoyer sur ton compte Microsoft.' $false 'Plus de Win+V. Si tu t''en sers, laisse décoché : seule la synchro cloud mérite d''être coupée, et c''est dans Paramètres > Système > Presse-papiers.' { Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' 'AllowClipboardHistory' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' 'AllowCrossDeviceClipboard' 0 } # ----- Jeu et réactivité ----------------------------------------------------- $G = 'Jeu et réactivité' Ajouter $G 'jeu-dvr' 'Couper Game DVR (enregistrement en fond de la Game Bar)' ` 'La Game Bar enregistre en permanence les 30 dernières secondes de jeu "au cas où". C est un encodeur qui tourne pendant que tu joues.' $true 'Plus de clip instantané Win+Alt+G. La Game Bar elle-même reste (Win+G).' { Reg-Ecrire 'HKCU:\System\GameConfigStore' 'GameDVR_Enabled' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR' 'AppCaptureEnabled' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR' 'AllowGameDVR' 0 } Ajouter $G 'jeu-presence' 'Couper le GameBarPresenceWriter (le processus qui reste après avoir coupé la Game Bar)' ` 'Même Game Bar coupée, un petit processus "Game Bar Presence Writer" se lance à chaque jeu pour dire au Xbox network à quoi tu joues. On désactive sa classe COM (ActivationType = 0) : il ne se lance plus. On ne renomme jamais l''exécutable, une mise à jour le remettrait et casserait la Game Bar.' $true 'Tes amis Xbox ne voient plus "joue à ...". La Game Bar (Win+G) marche toujours.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\Windows.Gaming.GameBar.PresenceServer.Internal.PresenceWriter' 'ActivationType' 0 } Ajouter $G 'jeu-timer' 'Autoriser la résolution de timer fine pour les jeux (GlobalTimerResolutionRequests)' ` 'Depuis Windows 11, une appli qui demande un timer à 0,5 ms ne l''obtient que pour elle-même et seulement au premier plan. Cette clé rétablit le comportement Windows 10 : la demande vaut pour tout le système. Un jeu qui demande un timer fin le garde même quand une autre fenêtre passe devant.' $true 'Consommation au repos très légèrement plus haute quand un programme demande un timer fin.' { Reg-Ecrire 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\kernel' 'GlobalTimerResolutionRequests' 1 } Ajouter $G 'jeu-mpo' 'Couper le Multiplane Overlay (MPO, OverlayTestMode = 5)' ` 'Le MPO laisse la carte graphique dessiner certaines fenêtres directement, sans passer par le compositeur de Windows (DWM). C est lui derrière les écrans noirs, les scintillements et les saccades en fenêtré que NVIDIA documente (article 5157, 2022) et que les cartes AMD connaissent aussi. Coupé, DWM compose tout : zéro effet en plein écran, plus de surprise en fenêtré ou en multi-écran. La clé vient de cette case et pas de NVCleanstall, pour que Tout remettre puisse la rendre.' $true 'Une vidéo en fenêtre coûte un peu plus de GPU (plus d''overlay matériel). Sur 24H2 et plus, Windows ignore parfois la clé : dans ce cas rien ne change.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\Dwm' 'OverlayTestMode' 5 } Ajouter $G 'jeu-souris' 'Couper l''accélération de la souris (Améliorer la précision du pointeur)' ` 'Avec l''accélération, la distance parcourue par le curseur dépend de la vitesse du geste : le même mouvement de main ne donne jamais le même mouvement à l''écran. Ta mémoire musculaire ne peut rien apprendre. Tout joueur la coupe, c''est la première chose à faire.' $true 'Le curseur demande un peu plus de mouvement de main sur le bureau. Monte le DPI de la souris si besoin.' { Reg-Ecrire 'HKCU:\Control Panel\Mouse' 'MouseSpeed' '0' 'String' Reg-Ecrire 'HKCU:\Control Panel\Mouse' 'MouseThreshold1' '0' 'String' Reg-Ecrire 'HKCU:\Control Panel\Mouse' 'MouseThreshold2' '0' 'String' } Ajouter $G 'jeu-hiber' 'Couper la mise en veille prolongée et le démarrage rapide' ` 'Libère hiberfil.sys (plusieurs Go) et force un vrai redémarrage à chaque boot au lieu de recharger une image figée. Un vrai boot évite les pilotes qui se retrouvent dans un état bizarre après une mise à jour.' (-not $EstPortable) 'Plus de mise en veille prolongée (la veille simple reste). Sur portable, la veille ne bascule plus en veille prolongée : la batterie se vide si le PC dort longtemps.' { Memoriser 'cmd|hibernation' @{ actif = ((powercfg /a) -match 'Mise en veille prolongée|Hibernate' | Where-Object { $_ -notmatch 'non disponible|not available' }).Count -gt 0 } powercfg /h off | Out-Null Log 'alim hibernation et démarrage rapide coupés' } Ajouter $G 'jeu-parking' 'Désactiver le core parking' ` 'Windows peut endormir des cœurs au repos, et met un instant à les réveiller quand un jeu en a besoin. Sur un Ryzen avec le pilote chipset AMD ou un Intel récent, Windows gère bien tout seul. Utile surtout sur les vieux CPU ou les portables.' $false 'Consommation au repos un peu plus haute.' { Powercfg-Regler 'SUB_PROCESSOR' 'CPMINCORES' 100 'cœurs minimum actifs (%)' } Ajouter $G 'jeu-usb' 'Couper la suspension sélective USB' ` 'Windows éteint les ports USB inactifs pour économiser 0,1 W. Une souris ou un clavier qui se rendort peut mettre quelques millisecondes à répondre. Sur PC fixe, aucun intérêt à économiser.' (-not $EstPortable) 'Sur portable, un peu moins d''autonomie.' { Powercfg-Regler '2a737441-1930-4402-8d77-b2bebba308a3' '48e6b7a6-50f5-4782-a5d4-53bb50f7e1e4' 0 'suspension sélective USB' } Ajouter $G 'jeu-pcie' 'Couper l''économie d''énergie PCI Express (ASPM)' ` 'Le lien PCIe de la carte graphique et du SSD peut passer en basse consommation au repos, avec un délai de réveil. Sur PC fixe, on laisse le lien toujours ouvert.' (-not $EstPortable) 'Sur portable, un peu moins d''autonomie.' { Powercfg-Regler '501a4d13-42af-4429-9fd1-a8218c268e20' 'ee12f906-d277-404b-b6da-e5fa1a576df5' 0 'PCIe link state' } Ajouter $G 'jeu-reveil' 'Interdire aux minuteurs de réveil de sortir le PC de veille' ` 'Windows Update et certaines tâches peuvent réveiller le PC en pleine nuit pour faire leur travail. On coupe les minuteurs de réveil dans le plan d''alimentation actif.' $true 'Le PC ne se réveille plus tout seul pour une mise à jour : elle se fera quand tu l''allumes.' { Powercfg-Regler '238c9fa8-0aad-41ed-83f4-97be242c8f20' 'bd3b718a-0680-4d9d-8ab2-e1d2b4ac806d' 0 'minuteurs de réveil' } Ajouter $G 'jeu-usb3' 'Couper la gestion d''énergie des liens USB 3 (Link Power Management)' ` 'Comme la suspension sélective mais pour la couche USB 3 : le lien passe en basse consommation entre deux transferts. Un disque externe ou une manette USB peut caler une fraction de seconde au réveil. Sur fixe on garde le lien à fond.' (-not $EstPortable) 'Sur portable, un peu moins d''autonomie.' { Powercfg-Regler '2a737441-1930-4402-8d77-b2bebba308a3' 'd4e98f31-5ffe-4ce1-be31-1b38b384c009' 0 'USB 3 Link Power Management' } if ($EstHdd) { Ajouter $G 'jeu-hdd' 'Ne jamais arrêter le disque dur (détecté : disque système HDD)' ` 'Windows arrête le disque dur après 20 minutes sans accès, et le relancer prend 2 à 5 secondes de blocage. Sur un HDD on garde le plateau en rotation.' $true 'Le disque tourne en permanence : un poil plus de bruit et d''usure.' { Powercfg-Regler '0012ee47-9041-4b5d-9b77-535fba8b1442' '6738e2c4-e8a5-4a42-b16a-e040e769756e' 0 'arrêt du disque dur' } } Ajouter $G 'jeu-pilotes' 'Empêcher Windows Update d''écraser tes pilotes' ` 'Windows Update installe parfois un pilote graphique plus vieux ou générique par-dessus celui que tu as posé (NVCleanstall, AMD). Cette clé garde la main.' $true 'Windows ne mettra plus aucun pilote à jour tout seul, c''est toi qui les gères (Snappy, constructeur).' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' 'SearchOrderConfig' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' 'ExcludeWUDriversInQualityUpdate' 1 } Ajouter $G 'jeu-nouveautes' 'Ne plus recevoir les nouveautés Windows en avance (Continuous Innovation)' ` 'Windows 11 propose "les dernières mises à jour dès qu''elles sont disponibles" : ce sont les nouvelles fonctions poussées avant leur sortie officielle, celles qui cassent le plus souvent un pilote ou un anti-cheat. On reste sur les versions stables. Les correctifs de sécurité arrivent pareil.' $true 'Les nouvelles fonctions arrivent quelques semaines ou mois plus tard.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings' 'IsContinuousInnovationOptedIn' 0 } Ajouter $G 'jeu-f8' 'Remettre le menu F8 au démarrage (mode sans échec)' ` 'Windows 11 cache le menu de démarrage avancé. Sans lui, pour entrer en mode sans échec il faut faire planter le boot trois fois de suite. Avec cette option, F8 au démarrage suffit.' $true 'Le démarrage prend une fraction de seconde de plus (le menu attend F8).' { Memoriser 'cmd|bootmenupolicy' @{ valeur = ((bcdedit /enum '{current}') | Select-String 'bootmenupolicy') -replace '.*bootmenupolicy\s+', '' } bcdedit /set '{current}' bootmenupolicy legacy | Out-Null Log 'boot bootmenupolicy = legacy (F8 actif)' } # ----- Carte réseau ------------------------------------------------------------- $G = 'Carte réseau (appliqué sur chaque carte physique active)' Ajouter $G 'net-alim' 'Interdire à Windows d''éteindre la carte réseau pour économiser l''énergie' ` 'Windows peut couper la carte au repos, et elle met une seconde à revenir : c''est le "le réseau a lâché 2 secondes" en pleine partie, surtout après une veille.' $true 'Sur portable, un peu moins d''autonomie.' { foreach ($c in Cartes-Reseau) { $pm = Get-NetAdapterPowerManagement -Name $c.Name -ErrorAction SilentlyContinue if ($pm) { Memoriser "netpm|$($c.Name)" @{ carte = $c.Name; valeur = [string]$pm.AllowComputerToTurnOffDevice } } Disable-NetAdapterPowerManagement -Name $c.Name -ErrorAction SilentlyContinue Log "réseau $($c.Name) : gestion de l'alimentation coupée" Net-Attendre $c } } Ajouter $G 'net-eee' 'Couper Energy Efficient Ethernet / Green Ethernet' ` 'Même logique : la puce réseau s''endort entre deux paquets pour économiser quelques milliwatts, et se réveille avec un délai. En jeu on veut la carte toujours réveillée.' $true 'Rien de visible.' { # Libellés vus : "Energy Efficient Ethernet", "Ethernet à économie d'énergie", "Green Ethernet", "Ethernet vert", "Advanced EEE", # "Power Saving Mode", "Gigabit Lite" (Realtek). Pas "EEE Max Support Speed", qui n'a pas de valeur Désactivé. foreach ($c in Cartes-Reseau) { Net-Propriete-Regler $c 'Energy.Efficient|conomie d|Green Ethernet|Ethernet vert|^Advanced EEE$|Power Saving|Gigabit Lite' '^(Disabled|Désactivé|Off)$' 'économie d''énergie de la puce' } } Ajouter $G 'net-moderation' 'Modération des interruptions sur Medium (pas Désactivé)' ` 'La carte regroupe ses interruptions pour ne pas réveiller le CPU à chaque paquet. Medium garde le CPU disponible pour le jeu tout en livrant les paquets vite. Tout couper fait l''inverse de ce que promettent les tutos : plus d''interruptions, plus de temps CPU volé au jeu (mesuré au xperf par djdallmann sur trafic UDP de jeu).' $false 'Si ta carte n''a pas cette option (souvent le cas sur Realtek), rien ne se passe.' { # Intel : "Interrupt Moderation Rate" (Off / Low / Medium / High / Adaptive). Realtek : "Modération interruption" (Désactivé / Activé), on garde Activé. foreach ($c in Cartes-Reseau) { Net-Propriete-Regler $c 'Interrupt Moderation|Modération interruption' '^(Medium|Moyen|Enabled|Activé)$' 'modération d''interruptions' } } Ajouter $G 'net-decouverte' 'Décocher les protocoles de découverte réseau (LLDP, topologie de liaison)' ` 'Trois protocoles qui servent à dessiner la carte du réseau local. Aucun gain de vitesse mesuré : on retire ce dont un PC de jeu ne se sert pas. TCP/IPv4 et IPv6 restent.' $true 'Le "mappage réseau" du Centre réseau ne voit plus les autres appareils. Personne ne l''utilise.' { foreach ($c in Cartes-Reseau) { Net-Liaison-Couper $c 'ms_lldp' 'pilote LLDP' Net-Liaison-Couper $c 'ms_lltdio' 'découverte de topologie (E/S)' Net-Liaison-Couper $c 'ms_rspndr' 'répondeur de topologie' } } Ajouter $G 'net-partage' 'Décocher le partage de fichiers et d''imprimantes Microsoft' ` 'Le protocole SMB côté serveur et client. Utile seulement si tu partages des dossiers entre PC de la maison ou vers un NAS.' $false 'Plus d''accès aux dossiers partagés des autres PC ni au NAS, et les autres ne voient plus les tiens. Coche seulement si tu n''as rien de tout ça.' { foreach ($c in Cartes-Reseau) { Net-Liaison-Couper $c 'ms_server' 'partage de fichiers et d''imprimantes' Net-Liaison-Couper $c 'ms_msclient' 'client pour les réseaux Microsoft' } } Ajouter $G 'net-qos' 'Décocher le Planificateur de paquets QoS' ` 'QoS priorise certains paquets quand la ligne est saturée. Sur une connexion normale il ne sert pas. Si tu as du lag en jeu pendant qu''un autre appareil télécharge, c''est justement lui qu''il faut remettre.' $false 'Plus de priorisation quand la ligne sature.' { foreach ($c in Cartes-Reseau) { Net-Liaison-Couper $c 'ms_pacer' 'planificateur QoS' } } # ----- Confort : Windows plus vif, sans effet sur les FPS --------------------- $G = 'Confort (aucun gain de FPS, juste plus vif)' Ajouter $G 'conf-bing' 'Plus de résultats web Bing dans le menu Démarrer' ` 'Chaque frappe dans Démarrer part sur Bing avant de chercher tes fichiers. On cherche en local seulement : plus rapide et rien n''est envoyé.' $true 'Plus de suggestions web dans Démarrer.' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search' 'BingSearchEnabled' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' 'DisableSearchBoxSuggestions' 1 } Ajouter $G 'conf-explorateur' 'Explorateur : extensions de fichiers visibles, ouvrir sur "Ce PC"' ` 'Voir ".exe" et ".txt" évite de lancer un faux fichier, et "Ce PC" est plus utile que l''accueil avec les fichiers récents.' $true '' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'HideFileExt' 0 Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' 'LaunchTo' 1 } Ajouter $G 'conf-menu-classique' 'Menu clic droit complet directement (sans "Afficher plus d''options")' ` 'Le menu clic droit de Windows 11 cache la moitié des entrées derrière "Afficher plus d''options". Cette clé rétablit le menu complet de Windows 10 d''un seul clic. L Explorateur est relancé pour appliquer.' $true 'Le menu est plus long et sans icônes modernes. Les entrées Windows 11 (Copier le chemin, Partager) restent accessibles par Maj+clic droit.' { $cle = 'HKCU:\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32' Memoriser 'cmd|menuclassique' @{ existait = [bool](Test-Path 'HKCU:\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}') } if (-not (Test-Path $cle)) { New-Item -Path $cle -Force | Out-Null } Set-ItemProperty -Path $cle -Name '(default)' -Value '' -ErrorAction SilentlyContinue Log 'registre menu contextuel classique activé' $Bagarre.RelancerExplorer = $true # une seule relance, à la fin de l'application } Ajouter $G 'conf-fin-tache' 'Bouton "Fin de tâche" dans le clic droit de la barre des tâches' ` 'Un clic droit sur une icône de la barre des tâches propose "Fin de tâche" : un programme figé se tue sans ouvrir le Gestionnaire des tâches. Option Windows 11 (Paramètres > Système > Pour les développeurs), juste cachée.' $true '' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDeveloperSettings' 'TaskbarEndTask' 1 } Ajouter $G 'conf-ducking' 'Son : "Ne rien faire" quand Discord ou un appel s''ouvre' ` 'Par défaut Windows baisse tous les autres sons de 80 % dès qu''une appli de communication (Discord, Teams) prend le micro. Le jeu devient inaudible en vocal. C est l''onglet Communications de la fenêtre Son, réglé sur "Ne rien faire".' $true '' { Reg-Ecrire 'HKCU:\Software\Microsoft\Multimedia\Audio' 'UserDuckingPreference' 3 } Ajouter $G 'conf-edge' 'Edge : plus de préchargement au démarrage ni de processus en fond' ` 'Edge se lance à moitié au démarrage de Windows (Startup Boost) et reste en mémoire fenêtre fermée (Background Mode), même si tu utilises un autre navigateur. Deux stratégies documentées par Microsoft.' $true 'Edge met une seconde de plus à s''ouvrir la première fois.' { Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' 'StartupBoostEnabled' 0 Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' 'BackgroundModeEnabled' 0 } Ajouter $G 'conf-eclairage' 'Couper l''éclairage dynamique (Dynamic Lighting)' ` 'Windows 11 pilote lui-même les LED RGB des périphériques compatibles, et son service tourne même sans LED. Si tu as iCUE, OpenRGB ou Armoury, ils se battent avec lui.' $false 'Windows ne gère plus tes LED : ton logiciel constructeur (ou rien) s''en charge.' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Lighting' 'AmbientLightingEnabled' 0 } Ajouter $G 'conf-accueil-parametres' 'Cacher la page "Accueil" de Paramètres (pubs Microsoft 365, Game Pass)' ` 'La première page de Paramètres est une vitrine : abonnement Microsoft 365, Game Pass, compte. On ouvre directement sur Système.' $false 'La carte "Périphériques récents" et le raccourci compte de cette page disparaissent avec elle.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer' 'SettingsPageVisibility' 'hide:home' 'String' } Ajouter $G 'conf-reserve' 'Libérer le stockage réservé de Windows Update (environ 7 Go)' ` 'Windows garde 7 Go de côté pour ses mises à jour. Avec un disque qui a de la place, elles se font aussi bien sans cette réserve.' $true 'Une grosse mise à jour peut échouer si le disque est presque plein (Windows te le dira).' { Memoriser 'cmd|reserve' @{ etat = [string](Get-WindowsReservedStorageState -ErrorAction SilentlyContinue).ReservedStorageState } Set-WindowsReservedStorageState -State Disabled -ErrorAction SilentlyContinue | Out-Null Log 'disque stockage réservé désactivé' } Ajouter $G 'conf-menus' 'Menus instantanés (MenuShowDelay 0, MouseHoverTime 10)' ` 'Windows attend 400 ms avant d''ouvrir un sous-menu. On le passe à 0.' $true '' { Reg-Ecrire 'HKCU:\Control Panel\Desktop' 'MenuShowDelay' '0' 'String' Reg-Ecrire 'HKCU:\Control Panel\Mouse' 'MouseHoverTime' '10' 'String' } Ajouter $G 'conf-demarrage' 'Lancer les programmes de démarrage sans attendre (StartupDelayInMSec 0)' ` 'Windows retarde de 10 secondes les programmes qui se lancent au démarrage. On enlève le délai.' $true 'Si tu as beaucoup de programmes au démarrage, le bureau peut être moins réactif les premières secondes.' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Serialize' 'StartupDelayInMSec' 0 } Ajouter $G 'conf-fin' 'Fermer sans demander les programmes qui retardent l''extinction (AutoEndTasks)' ` 'À l''extinction, Windows ferme de force tout programme qui retarde l''arrêt au lieu d''afficher la fenêtre "ce programme empêche l''arrêt". Ça vaut aussi pour un programme qui attend que tu enregistres.' $false 'Un document non enregistré est perdu à l''extinction, même dans un programme qui répond.' { Reg-Ecrire 'HKCU:\Control Panel\Desktop' 'AutoEndTasks' '1' 'String' } Ajouter $G 'conf-transparence' 'Couper la transparence' ` 'Les effets de flou derrière le menu Démarrer et la barre des tâches. Coûte un peu de GPU en permanence.' $false 'Interface plus plate.' { Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize' 'EnableTransparency' 0 } Ajouter $G 'conf-animations' 'Couper les animations de fenêtres' ` 'Les fenêtres apparaissent d''un coup au lieu de glisser. Windows semble plus rapide parce qu''il n''attend plus la fin de l''animation.' $false 'Interface plus sèche. Goût personnel.' { Reg-Ecrire 'HKCU:\Control Panel\Desktop\WindowMetrics' 'MinAnimate' '0' 'String' Reg-Ecrire 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects' 'VisualFXSetting' 3 Reg-Ecrire 'HKCU:\Control Panel\Desktop' 'UserPreferencesMask' ([byte[]](0x90, 0x12, 0x03, 0x80, 0x10, 0x00, 0x00, 0x00)) 'Binary' } Ajouter $G 'conf-accessibilite' 'Couper les raccourcis d''accessibilité (touches rémanentes, filtre)' ` 'Appuyer 5 fois sur Shift en jeu ouvre la fenêtre des touches rémanentes. Plus jamais.' $true '' { Reg-Ecrire 'HKCU:\Control Panel\Accessibility\StickyKeys' 'Flags' '506' 'String' Reg-Ecrire 'HKCU:\Control Panel\Accessibility\Keyboard Response' 'Flags' '122' 'String' Reg-Ecrire 'HKCU:\Control Panel\Accessibility\ToggleKeys' 'Flags' '58' 'String' } Ajouter $G 'conf-acces-rapide' 'Explorateur : retirer "Accès rapide" du volet de gauche (HubMode)' ` 'Le volet de gauche de l''Explorateur commence par "Accès rapide" et ses dossiers récents. Cette clé le retire, le volet commence à "Ce PC". Source : tenforums.com, tutoriel 4844 (Shawn Brink, 2018), toujours valable sur Windows 11.' $false 'Plus de raccourcis "Accès rapide" ni de dossiers récents dans le volet.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer' 'HubMode' 1 } Ajouter $G 'conf-corbeille' 'Explorateur : la Corbeille dans "Ce PC"' ` 'Ajoute la Corbeille à côté des disques dans "Ce PC" et dans le volet de gauche. Source : howtogeek.com, article 282820 (Walter Glenn).' $false 'Rien, la clé se retire au retour arrière.' { $cle = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{645FF040-5081-101B-9F08-00AA002F954E}' Memoriser 'cmd|corbeille' @{ existait = (Test-Path $cle) } if (-not (Test-Path $cle)) { New-Item -Path $cle -Force | Out-Null } Log 'registre Corbeille ajoutée dans Ce PC' } Ajouter $G 'conf-vlc-pistes' 'VLC : clic droit "VLC with mixed audio tracks" sur les .mp4' ` 'Ajoute une entrée au clic droit des .mp4 qui lance VLC avec toutes les pistes audio mélangées (--sout-all). Sert aux vidéos de jeu enregistrées avec la voix et le jeu sur deux pistes. Il faut VLC installé dans C:\Program Files\VideoLAN.' $false 'Une entrée de plus dans le clic droit des .mp4.' { $base = 'Registry::HKEY_CLASSES_ROOT\VLC.mp4\shell\PlayWithVLCMixAudio' Reg-Ecrire $base '(default)' 'VLC with mixed audio tracks' 'String' Reg-Ecrire $base 'Icon' '"C:\Program Files\VideoLAN\VLC\vlc.exe",0' 'String' Reg-Ecrire $base 'MultiSelectModel' 'Player' 'String' Reg-Ecrire "$base\command" '(default)' '"C:\Program Files\VideoLAN\VLC\vlc.exe" --sout-all --sout #display "%1%" --started-from-file --no-playlist-enqueue "%1"' 'String' } # ----- Avancé : décoché par défaut, tu lis avant de cocher --------------------- $G = 'Avancé (décoché par défaut, lis l''explication avant)' Ajouter $G 'adv-throttling' 'Couper le Power Throttling (PowerThrottlingOff)' ` 'Windows bride les programmes qu''il juge "en arrière-plan" (EcoQoS) pour économiser de l''énergie. Sur un PC fixe on ne veut brider personne : Discord, ton launcher, l''overlay tournent à pleine vitesse même derrière le jeu.' $false 'Sur portable, moins d''autonomie. Sur fixe, rien.' { Reg-Ecrire 'HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling' 'PowerThrottlingOff' 1 } Ajouter $G 'adv-nagle' 'Couper l''algorithme de Nagle (TcpAckFrequency, TCPNoDelay) sur la carte active' ` 'Nagle regroupe les petits paquets TCP avant de les envoyer, et retarde les accusés de réception. Quelques ms de gagnées sur un jeu en TCP (MMO, certains jeux Unity). Zéro effet sur un jeu en UDP, c''est-à-dire quasiment tous les FPS.' $false 'Un peu plus de petits paquets sur la ligne. Rien de visible.' { foreach ($c in Cartes-Reseau) { $guid = (Get-NetAdapter -Name $c.Name).InterfaceGuid $chemin = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\$guid" if (Test-Path $chemin) { Reg-Ecrire $chemin 'TcpAckFrequency' 1; Reg-Ecrire $chemin 'TCPNoDelay' 1 } } } Ajouter $G 'adv-dyntick' 'Couper le tick dynamique (bcdedit disabledynamictick)' ` 'Le noyau arrête son horloge quand rien ne se passe et la relance à la demande. Avec un timer à 0,5 ms ça peut dériver. À cocher seulement si tu vois des micro-saccades que RivaTuner confirme, et à décocher si ça ne change rien.' $false 'Consommation au repos un peu plus haute.' { Memoriser 'cmd|dyntick' @{ valeur = ((bcdedit /enum '{current}') | Select-String 'disabledynamictick') -replace '.*disabledynamictick\s+', '' } bcdedit /set '{current}' disabledynamictick yes | Out-Null Log 'boot disabledynamictick = yes' } Ajouter $G 'adv-fth' 'Couper le Fault Tolerant Heap (FTH)' ` 'Quand un programme plante plusieurs fois, Windows le relance avec un allocateur mémoire "tolérant" et plus lent, sans le dire. Un jeu qui a crashé trois fois tourne ensuite bridé. Coupé, il plante pareil mais tourne à pleine vitesse le reste du temps. Documenté par Microsoft (FTH, Win32 apps).' $false 'Un vieux programme instable que le FTH maintenait en vie peut replanter.' { Reg-Ecrire 'HKLM:\SOFTWARE\Microsoft\FTH' 'Enabled' 0 } Ajouter $G 'adv-llmnr' 'Couper LLMNR (résolution de noms multicast)' ` 'Quand un nom n''est pas trouvé par le DNS, Windows le crie en multicast sur le réseau local (LLMNR). C est une porte d''entrée connue pour intercepter des identifiants (Responder) et du bruit réseau pour rien. Recommandation sécurité standard en entreprise.' $false 'Taper \\NOM-DU-PC pour joindre un autre PC de la maison peut ne plus marcher (utilise son IP ou active mDNS côté NAS).' { Reg-Ecrire 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient' 'EnableMulticast' 0 } # ----- Groupes par marque : seulement sur la machine concernée ---------------------- if ($EstIntelCpu) { $G = 'Processeur Intel' Ajouter $G 'adv-boost' 'Boost du processeur en Aggressive (PERFBOOSTMODE)' ` 'Le mode boost du plan d''alimentation décide à quelle vitesse le processeur monte en fréquence quand la charge arrive. Aggressive le fait monter tout de suite au lieu d''attendre. Clé Intel : sur AMD le boost est géré par le firmware.' $false 'Sur portable : chauffe et batterie pour rien. Sur fixe, un peu plus de consommation au repos.' { Powercfg-Regler 'SUB_PROCESSOR' 'PERFBOOSTMODE' 2 'mode boost du processeur' } } if ($EstNvidia) { $G = 'Carte graphique NVIDIA' Ajouter $G 'nv-telemetrie' 'Couper la télémétrie NVIDIA' ` 'Le pilote envoie des statistiques à NVIDIA. Deux clés, aucun effet sur le jeu.' $true '' { Reg-Ecrire 'HKLM:\SOFTWARE\NVIDIA Corporation\NvControlPanel2\Client' 'OptInOrOutPreference' 0 Reg-Ecrire 'HKLM:\SYSTEM\CurrentControlSet\Services\nvlddmkm\Global\Startup' 'SendTelemetryData' 0 } Ajouter $G 'nv-pstate' 'Bloquer la carte en P0 (DisableDynamicPstate)' ` 'Au repos la carte descend en fréquence, et met quelques images à remonter quand une scène se charge d''un coup : c''est le micro-freeze après un menu ou un chargement. Cette clé la garde à sa fréquence max tant que Windows tourne. Vérifiable avec nvidia-smi (Perf P0). Le réglage "Privilégier les performances maximales" du panneau fait presque pareil sans redémarrage, cette clé est le cran au-dessus.' $false 'Carte plus chaude et plus gourmande au repos, ventilateurs qui ne s''arrêtent plus sur certaines cartes.' { $classe = 'HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}' $cle = Get-ChildItem $classe -ErrorAction SilentlyContinue | Where-Object { (Reg-Lire $_.PSPath 'DriverDesc') -match 'NVIDIA' } | Select-Object -First 1 if ($cle) { Reg-Ecrire $cle.PSPath 'DisableDynamicPstate' 1 } else { Log 'nvidia clé du pilote introuvable, DisableDynamicPstate non posé' } } } # Ce que fait la case une fois cochée, affiché en étiquette devant chaque ligne : 'off' (coupe le truc, le défaut), # 'on' (l'ajoute ou l'autorise), 'set' (change une valeur). Un item absent d'ici est 'off'. $Actions = @{ 'jeu-timer' = 'on'; 'jeu-f8' = 'on' 'conf-menu-classique' = 'on'; 'conf-fin-tache' = 'on'; 'conf-corbeille' = 'on'; 'conf-vlc-pistes' = 'on' 'jeu-hdd' = 'set'; 'net-moderation' = 'set'; 'conf-explorateur' = 'set' 'conf-menus' = 'set'; 'conf-demarrage' = 'set'; 'conf-fin' = 'set'; 'conf-ducking' = 'set' 'adv-boost' = 'set'; 'nv-pstate' = 'set' } function Item-Action($it) { if ($Actions[$it.Id]) { $Actions[$it.Id] } else { 'off' } } # Détection de ce qui est déjà fait. Par défaut le bloc Appliquer est rejoué en simulation ($Bagarre.Simulation) : les # fonctions d'écriture comparent au lieu d'écrire. Les items qui lancent une commande directe ont leur test ici, # ils ne doivent JAMAIS être rejoués en simulation (bcdedit, powercfg /h, schtasks, explorer relancé). $Verifs = @{ 'jeu-hiber' = { (Reg-Lire 'HKLM:\SYSTEM\CurrentControlSet\Control\Power' 'HibernateEnabled') -eq 0 } 'jeu-f8' = { [bool]((bcdedit /enum '{current}' 2>$null) -match 'bootmenupolicy\s+Legacy') } 'net-alim' = { $cartes = @(Cartes-Reseau) if ($cartes.Count -eq 0) { $null } else { @($cartes | ForEach-Object { [string](Get-NetAdapterPowerManagement -Name $_.Name -ErrorAction SilentlyContinue).AllowComputerToTurnOffDevice }) -notcontains 'Enabled' } } 'conf-menu-classique' = { Test-Path 'HKCU:\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}' } 'conf-reserve' = { [string](Get-WindowsReservedStorageState -ErrorAction SilentlyContinue).ReservedStorageState -eq 'Disabled' } 'conf-corbeille' = { Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{645FF040-5081-101B-9F08-00AA002F954E}' } 'adv-dyntick' = { [bool]((bcdedit /enum '{current}' 2>$null) -match 'disabledynamictick\s+Yes') } } # Rend $true (déjà fait), $false (à faire) ou $null (rien à comparer sur cette machine) function Detecter-Item($it) { if ($Verifs[$it.Id]) { try { return (& $Verifs[$it.Id]) } catch { return $null } } $Bagarre.Verif = New-Object System.Collections.ArrayList $Bagarre.Simulation = $true try { & $it.Appliquer } catch {} finally { $Bagarre.Simulation = $false } if ($Bagarre.Verif.Count -eq 0) { return $null } return ($Bagarre.Verif -notcontains $false) } # ===== 15-catalogue-en.ps1 ===== # --------------------------------------------------------------------------- # English titles and explanations of the catalogue, by item id (the French ones live in 10-catalogue.ps1) # --------------------------------------------------------------------------- $TraductionsEn = @{ 'svc-telemetrie' = @{ Titre = 'Microsoft telemetry (DiagTrack, dmwappushservice)'; Pourquoi = 'Sends your usage to Microsoft continuously. No role for you.'; Attention = '' } 'svc-geoloc' = @{ Titre = 'Location services (lfsvc)'; Pourquoi = 'GPS position for Store apps. A desktop PC does not move.'; Attention = 'Weather and map apps no longer locate you, and automatic time zone stops working: set it once in Settings > Time & language.' } 'svc-phone' = @{ Titre = 'Telephony (PhoneSvc)'; Pourquoi = 'Used by Phone Link to make calls from the PC.'; Attention = 'Phone Link loses call support.' } 'svc-maps' = @{ Titre = 'Offline maps (MapsBroker)'; Pourquoi = 'Downloads maps for the Maps app. Nobody uses it.'; Attention = '' } 'svc-demo' = @{ Titre = 'Retail demo mode (RetailDemo)'; Pourquoi = 'The showcase mode for PCs on a store shelf.'; Attention = '' } 'svc-wer' = @{ Titre = 'Windows Error Reporting (WerSvc)'; Pourquoi = 'Sends a report to Microsoft when a program crashes.'; Attention = 'No more automatic report when an app crashes (you can still read Event Viewer).' } 'svc-fax' = @{ Titre = 'Fax'; Pourquoi = 'The service that sends faxes through a modem. A gaming PC has no fax modem.'; Attention = '' } 'svc-compat' = @{ Titre = 'Program Compatibility Assistant (PcaSvc)'; Pourquoi = 'Watches every launch of an old program to suggest a compatibility mode.'; Attention = 'Windows no longer offers to fix an old program on its own.' } 'svc-xbox' = @{ Titre = 'Xbox services (XblAuthManager, XblGameSave, XboxNetApiSvc)'; Pourquoi = 'Xbox Live sign-in, Xbox cloud saves, Xbox networking.'; Attention = 'Game Pass for PC, the Xbox app and Microsoft Store games stop connecting. Leave unchecked if you play an Xbox or Game Pass title.' } 'svc-edge' = @{ Titre = 'Edge background updates (edgeupdate, edgeupdatem)'; Pourquoi = 'Two services that check Edge every hour. Edge updates itself on launch anyway.'; Attention = '' } 'svc-wmp' = @{ Titre = 'Windows Media Player network sharing (WMPNetworkSvc)'; Pourquoi = 'Streams your WMP library on the local network.'; Attention = '' } 'svc-insider' = @{ Titre = 'Windows Insider Program (wisvc)'; Pourquoi = 'Only used to receive beta versions of Windows.'; Attention = '' } 'svc-diag' = @{ Titre = 'Automatic diagnostics (DPS, WdiServiceHost, WdiSystemHost)'; Pourquoi = 'The automatic troubleshooting utilities. They run permanently for very rare use.'; Attention = 'The Troubleshoot button in Settings stops working while this is off. The Battery usage and Data usage pages stay empty: their counter (SRUM) runs in this service.' } 'svc-cdp' = @{ Titre = 'Connected Devices Platform (CDPSvc)'; Pourquoi = 'Nearby Sharing, Phone Link, continuity between devices.'; Attention = 'Nearby Sharing and Phone Link stop working.' } 'svc-imprimante' = @{ Titre = 'Print spooler (Spooler)'; Pourquoi = 'Manages printers. Without a printer, it runs for nothing.'; Attention = 'You can no longer print, not even to PDF. Check this only if you never have a printer.' } 'svc-recherche' = @{ Titre = 'Search indexing (WSearch)'; Pourquoi = 'Builds an index of your files so Start menu search is instant. On an SSD, indexing costs very little.'; Attention = 'File search in Start and File Explorer becomes slow. Outlook too.' } 'svc-sysmain' = @{ Titre = 'SysMain (formerly Superfetch)'; Pourquoi = ('Preloads into RAM the programs you launch often. On an SSD it does not get in the way, on a hard drive it can cause slowdowns. ' + $(if ($EstHdd) { 'Your system disk is an HDD: check it.' } else { 'Your system disk is an SSD: leave it.' })); Attention = 'Program launches are no longer preloaded.' } 'svc-bluetooth' = @{ Titre = 'Bluetooth (bthserv, BTAGService)'; Pourquoi = 'Everything Bluetooth.'; Attention = 'No more Bluetooth devices: headset, controller, mouse. Check this only if you have none at all.' } 'svc-delivery' = @{ Titre = 'Delivery Optimization: stop sending updates to strangers'; Pourquoi = 'By default your PC re-sends the Windows updates it downloaded to other PCs on the internet (peer to peer). That uses upload bandwidth while you play. We keep the download, we cut the upload.'; Attention = '' } 'priv-telemetrie' = @{ Titre = 'Telemetry at the minimum (AllowTelemetry, CEIP, error reports, PowerShell)'; Pourquoi = 'Sets the level of data sent to Microsoft to the lowest. Honestly: on Home and Pro, AllowTelemetry=0 behaves like 1 (the "required" level stays), only Enterprise and Education editions cut everything. We also cut the Customer Experience Improvement Program (CEIP), crash report sending, feedback requests and PowerShell telemetry.'; Attention = 'Crash reports no longer go to Microsoft (they stay readable in Event Viewer).' } 'priv-pub' = @{ Titre = 'Advertising ID, suggestions, Start menu "Recommended" section, Chat button'; Pourquoi = 'Cuts the advertising ID, suggestions in Start and its "Recommended" section, tips on the lock screen, ads in File Explorer, silent installation of sponsored apps, the rotating illustrations in the search box, the Chat (Teams) button on the taskbar and online tips in Settings.'; Attention = 'The Start menu "Recommended" section becomes empty (recent files stay in File Explorer).' } 'priv-saisie' = @{ Titre = 'Typing and voice personalization'; Pourquoi = 'Windows learns your typing, handwriting and voice to send them to the cloud. Useless outside Cortana.'; Attention = '' } 'priv-fond' = @{ Titre = 'Store apps running in the background'; Pourquoi = 'Stops Store apps from running once closed.'; Attention = 'Notifications from these apps (Mail, Weather) stop arriving while they are closed.' } 'priv-copilot' = @{ Titre = 'Turn off Copilot, Recall, Click to Do, Widgets and the Notepad / Paint AI features'; Pourquoi = 'Copilot and Widgets are processes that stay in memory. Recall, when active, takes a screenshot every few seconds and indexes it: constant CPU and disk use. Click to Do analyzes the screen on demand. The AllowRecallEnablement and DisableClickToDo policies are the ones documented by Microsoft (WindowsAI CSP policy, 2025). We also set the AI stack service (WSAIFabricSvc) to manual and turn off the AI buttons in Notepad and Paint.'; Attention = 'No more Copilot, no more Recall, no more Click to Do (Win+click), no more weather / news panel, no more "Rewrite" in Notepad or Cocreator in Paint.' } 'priv-taches' = @{ Titre = 'Telemetry scheduled tasks (Compatibility Appraiser, CEIP, Feedback, DiskDiagnostic)'; Pourquoi = 'Background tasks that scan your installed programs and send the result to Microsoft, sometimes in the middle of a game (Compatibility Appraiser is known for its disk spikes).'; Attention = '' } 'priv-assistance' = @{ Titre = 'Turn off Remote Assistance'; Pourquoi = 'Lets someone take control of your PC through Windows. Nobody uses it, and it is one less door open.'; Attention = 'The Windows "Quick Assist" button stops working (Discord, AnyDesk, Parsec are not affected).' } 'priv-sync' = @{ Titre = 'Settings sync with your Microsoft account'; Pourquoi = 'Stops sending theme, passwords and settings to the Microsoft cloud.'; Attention = 'Your settings no longer follow you to another PC signed in with the same account.' } 'priv-autorun' = @{ Titre = 'Turn off automatic execution for USB drives and disks (AutoRun / AutoPlay)'; Pourquoi = 'A plugged-in drive no longer launches anything on its own. This has been Microsoft''s baseline security recommendation since 2011, still open by default for the "what do you want to do?" window.'; Attention = 'No more automatic window when you plug in a drive or a phone: you open it from File Explorer.' } 'priv-relance' = @{ Titre = 'Stop reopening apps automatically after an update (ARSO)'; Pourquoi = 'After an update restart, Windows signs back in on its own and relaunches whatever was open. A PC that boots with 15 windows and yesterday''s launcher.'; Attention = 'After an update you type your PIN again and reopen your apps yourself.' } 'priv-metadata' = @{ Titre = 'Stop downloading device info sheets and icons from Microsoft'; Pourquoi = 'Every device you plug in triggers a download of its icon and info sheet from Microsoft. Purely cosmetic, in "Devices and Printers".'; Attention = 'Devices show a generic icon.' } 'priv-presse-papiers' = @{ Titre = 'Turn off clipboard history (Win+V) and its cloud sync'; Pourquoi = 'Windows keeps in memory everything you copy, passwords included, and can send it to your Microsoft account.'; Attention = 'No more Win+V. If you use it, leave this unchecked: only the cloud sync is worth cutting, and that is in Settings > System > Clipboard.' } 'jeu-dvr' = @{ Titre = 'Turn off Game DVR (Game Bar background recording)'; Pourquoi = 'Game Bar constantly records the last 30 seconds of gameplay "just in case". That is an encoder running while you play.'; Attention = 'No more instant clip with Win+Alt+G. Game Bar itself stays (Win+G).' } 'jeu-presence' = @{ Titre = 'Turn off GameBarPresenceWriter (the process that remains after turning off Game Bar)'; Pourquoi = 'Even with Game Bar off, a small "Game Bar Presence Writer" process launches with every game to tell the Xbox network what you are playing. We disable its COM class (ActivationType = 0): it no longer launches. We never rename the executable, an update would restore it and break Game Bar.'; Attention = 'Your Xbox friends no longer see "playing ...". Game Bar (Win+G) still works.' } 'jeu-timer' = @{ Titre = 'Allow fine timer resolution for games (GlobalTimerResolutionRequests)'; Pourquoi = 'Since Windows 11, an app that requests a 0.5 ms timer only gets it for itself and only in the foreground. This key restores the Windows 10 behavior: the request applies to the whole system. A game that requests a fine timer keeps it even when another window comes in front.'; Attention = 'Idle power draw goes very slightly higher when a program requests a fine timer.' } 'jeu-souris' = @{ Titre = 'Turn off mouse acceleration (Enhance pointer precision)'; Pourquoi = 'With acceleration, the distance the cursor travels depends on how fast you move your hand: the same hand movement never gives the same on-screen movement. Your muscle memory cannot learn anything. Every gamer turns it off, it is the first thing to do.'; Attention = 'The cursor needs a bit more hand movement on the desktop. Raise your mouse DPI if needed.' } 'jeu-hiber' = @{ Titre = 'Turn off hibernation and fast startup'; Pourquoi = 'Frees hiberfil.sys (several GB) and forces a real restart on every boot instead of reloading a frozen image. A real boot avoids drivers ending up in a weird state after an update.'; Attention = 'No more hibernation (regular sleep stays). On a laptop, sleep no longer falls back to hibernation: the battery drains if the PC sleeps for a long time.' } 'jeu-parking' = @{ Titre = 'Disable core parking'; Pourquoi = 'Windows can put idle cores to sleep, and takes a moment to wake them when a game needs them. On a Ryzen with the AMD chipset driver or a recent Intel CPU, Windows handles this well on its own. Mostly useful on older CPUs or laptops.'; Attention = 'Idle power draw a bit higher.' } 'jeu-usb' = @{ Titre = 'Turn off USB selective suspend'; Pourquoi = 'Windows turns off idle USB ports to save 0.1 W. A mouse or keyboard that falls asleep can take a few milliseconds to respond. On a desktop PC, there is no point saving that.'; Attention = 'On a laptop, a bit less battery life.' } 'jeu-pcie' = @{ Titre = 'Turn off PCI Express power saving (ASPM)'; Pourquoi = 'The PCIe link of the graphics card and SSD can drop to low power at idle, with a wake delay. On a desktop PC, we leave the link always open.'; Attention = 'On a laptop, a bit less battery life.' } 'jeu-reveil' = @{ Titre = 'Block wake timers from taking the PC out of sleep'; Pourquoi = 'Windows Update and some tasks can wake the PC in the middle of the night to do their work. We turn off wake timers in the active power plan.'; Attention = 'The PC no longer wakes on its own for an update: it happens when you turn it on.' } 'jeu-usb3' = @{ Titre = 'Turn off USB 3 link power management (Link Power Management)'; Pourquoi = 'Like selective suspend but for the USB 3 layer: the link drops to low power between transfers. An external drive or a USB controller can stall for a fraction of a second on wake. On a desktop we keep the link at full power.'; Attention = 'On a laptop, a bit less battery life.' } 'jeu-hdd' = @{ Titre = 'Never stop the hard drive (detected: HDD system disk)'; Pourquoi = 'Windows stops the hard drive after 20 minutes without access, and spinning it back up causes a 2 to 5 second freeze. On an HDD we keep the platter spinning.'; Attention = 'The disk spins permanently: a bit more noise and wear.' } 'jeu-pilotes' = @{ Titre = 'Stop Windows Update from overwriting your drivers'; Pourquoi = 'Windows Update sometimes installs an older or generic graphics driver over the one you set up (NVCleanstall, AMD). This key keeps you in control.'; Attention = 'Windows no longer updates any driver on its own, you manage them yourself (Snappy Driver Installer, vendor tools).' } 'jeu-nouveautes' = @{ Titre = 'Stop receiving Windows features early (Continuous Innovation)'; Pourquoi = 'Windows 11 offers "get the latest updates as soon as they are available": these are new features pushed before their official release, the ones most likely to break a driver or an anti-cheat. We stay on stable versions. Security fixes still arrive the same.'; Attention = 'New features arrive a few weeks or months later.' } 'jeu-f8' = @{ Titre = 'Restore the F8 boot menu (Safe Mode)'; Pourquoi = 'Windows 11 hides the advanced boot menu. Without it, entering Safe Mode requires making the boot fail three times in a row. With this option, F8 at startup is enough.'; Attention = 'Startup takes a fraction of a second longer (the menu waits for F8).' } 'net-alim' = @{ Titre = 'Stop Windows from turning off the network card to save power'; Pourquoi = 'Windows can turn off the card at idle, and it takes a second to come back: that is the "network dropped for 2 seconds" in the middle of a match, especially after sleep.'; Attention = 'On a laptop, a bit less battery life.' } 'net-eee' = @{ Titre = 'Turn off Energy Efficient Ethernet / Green Ethernet'; Pourquoi = 'Same logic: the network chip sleeps between packets to save a few milliwatts, and wakes up with a delay. While gaming you want the card always awake.'; Attention = 'Nothing visible.' } 'net-moderation' = @{ Titre = 'Interrupt Moderation set to Medium (not Disabled)'; Pourquoi = 'The card groups its interrupts so it does not wake the CPU on every packet. Medium keeps the CPU available for the game while still delivering packets fast. Turning it off entirely does the opposite of what the tutorials promise: more interrupts, more CPU time stolen from the game (measured with xperf by djdallmann on game UDP traffic).'; Attention = 'If your card does not have this option (often the case on Realtek), nothing happens.' } 'net-decouverte' = @{ Titre = 'Uncheck the network discovery protocols (LLDP, link layer topology)'; Pourquoi = 'Three protocols used to draw a map of the local network. No measured speed gain: we remove what a gaming PC does not use. TCP/IPv4 and IPv6 stay on.'; Attention = 'The Network and Sharing Center "network map" no longer sees other devices. Nobody uses it.' } 'net-partage' = @{ Titre = 'Uncheck Microsoft file and printer sharing'; Pourquoi = 'The SMB protocol, both server and client side. Only useful if you share folders between PCs at home or with a NAS.'; Attention = 'No more access to other PCs'' shared folders or to a NAS, and others no longer see yours. Check this only if you have none of that.' } 'net-qos' = @{ Titre = 'Uncheck the QoS Packet Scheduler'; Pourquoi = 'QoS prioritizes certain packets when the line is saturated. On a normal connection it does nothing. If you get lag in games while another device is downloading, this is exactly what you should turn back on.'; Attention = 'No more prioritization when the line saturates.' } 'conf-bing' = @{ Titre = 'No more Bing web results in the Start menu'; Pourquoi = 'Every keystroke in Start goes to Bing before searching your files. We search locally only: faster and nothing gets sent out.'; Attention = 'No more web suggestions in Start.' } 'conf-explorateur' = @{ Titre = 'File Explorer: visible file extensions, open to "This PC"'; Pourquoi = 'Seeing ".exe" and ".txt" helps you avoid launching a fake file, and "This PC" is more useful than the home view with recent files.'; Attention = '' } 'conf-menu-classique' = @{ Titre = 'Full right-click menu directly (no "Show more options")'; Pourquoi = 'The Windows 11 right-click menu hides half its entries behind "Show more options". This key restores the full Windows 10 menu in a single click. File Explorer restarts to apply it.'; Attention = 'The menu is longer and without modern icons. The Windows 11 entries (Copy as path, Share) stay accessible with Shift+right-click.' } 'conf-fin-tache' = @{ Titre = '"End task" button in the taskbar right-click menu'; Pourquoi = 'Right-clicking a taskbar icon offers "End task": a frozen program dies without opening Task Manager. A Windows 11 option (Settings > System > For developers), just hidden.'; Attention = '' } 'conf-ducking' = @{ Titre = 'Sound: "Do nothing" when Discord or a call opens'; Pourquoi = 'By default Windows lowers every other sound by 80% as soon as a communication app (Discord, Teams) grabs the microphone. The game goes silent in voice chat. This is the Communications tab of the Sound window, set to "Do nothing".'; Attention = '' } 'conf-edge' = @{ Titre = 'Edge: no more startup preload or background process'; Pourquoi = 'Edge half-launches at Windows startup (Startup Boost) and stays in memory after you close its window (Background Mode), even if you use another browser. Two policies documented by Microsoft.'; Attention = 'Edge takes one more second to open the first time.' } 'conf-eclairage' = @{ Titre = 'Turn off Dynamic Lighting'; Pourquoi = 'Windows 11 drives the RGB LEDs of compatible devices itself, and its service runs even without LEDs. If you have iCUE, OpenRGB or Armoury Crate, they fight with it.'; Attention = 'Windows no longer manages your LEDs: your vendor software (or nothing) takes over.' } 'conf-accueil-parametres' = @{ Titre = 'Hide the Settings "Home" page (Microsoft 365, Game Pass ads)'; Pourquoi = 'The first page of Settings is a showcase: Microsoft 365 subscription, Game Pass, account. We open straight to System instead.'; Attention = 'The "Recent devices" card and the account shortcut on that page disappear with it.' } 'conf-reserve' = @{ Titre = 'Free up Windows Update reserved storage (about 7 GB)'; Pourquoi = 'Windows sets 7 GB aside for its updates. With a disk that has room, updates work just as well without that reserve.'; Attention = 'A big update can fail if the disk is nearly full (Windows will tell you).' } 'conf-menus' = @{ Titre = 'Instant menus (MenuShowDelay 0, MouseHoverTime 10)'; Pourquoi = 'Windows waits 400 ms before opening a submenu. We set it to 0.'; Attention = '' } 'conf-demarrage' = @{ Titre = 'Launch startup programs without delay (StartupDelayInMSec 0)'; Pourquoi = 'Windows delays startup programs by 10 seconds. We remove the delay.'; Attention = 'If you have many startup programs, the desktop can feel less responsive for the first few seconds.' } 'conf-fin' = @{ Titre = 'Close programs that delay shutdown without asking (AutoEndTasks)'; Pourquoi = 'At shutdown, Windows force-closes any program that delays it instead of showing the "this program is preventing shutdown" window. That includes a program waiting for you to save.'; Attention = 'An unsaved document is lost at shutdown, even in a program that responds.' } 'conf-transparence' = @{ Titre = 'Turn off transparency'; Pourquoi = 'The blur effects behind the Start menu and taskbar. Costs a bit of GPU constantly.'; Attention = 'A flatter interface.' } 'conf-animations' = @{ Titre = 'Turn off window animations'; Pourquoi = 'Windows appear instantly instead of sliding in. Windows feels faster because it no longer waits for the animation to finish.'; Attention = 'A blunter interface. Personal taste.' } 'conf-accessibilite' = @{ Titre = 'Turn off accessibility shortcuts (Sticky Keys, Filter Keys)'; Pourquoi = 'Pressing Shift 5 times during a game opens the Sticky Keys window. Never again.'; Attention = '' } 'conf-acces-rapide' = @{ Titre = 'File Explorer: remove "Quick access" from the left pane (HubMode)'; Pourquoi = 'File Explorer''s left pane starts with "Quick access" and its recent folders. This key removes it, the pane starts at "This PC". Source: tenforums.com, tutorial 4844 (Shawn Brink, 2018), still valid on Windows 11.'; Attention = 'No more "Quick access" shortcuts or recent folders in the pane.' } 'conf-corbeille' = @{ Titre = 'File Explorer: Recycle Bin in "This PC"'; Pourquoi = 'Adds the Recycle Bin next to the drives in "This PC" and in the left pane. Source: howtogeek.com, article 282820 (Walter Glenn).'; Attention = 'Nothing, the key removes cleanly on rollback.' } 'conf-vlc-pistes' = @{ Titre = 'VLC: right-click "VLC with mixed audio tracks" on .mp4 files'; Pourquoi = 'Adds a right-click entry on .mp4 files that launches VLC with all audio tracks mixed together (--sout-all). Useful for gameplay recordings with voice and game audio on two separate tracks. Requires VLC installed at C:\Program Files\VideoLAN.'; Attention = 'One more entry in the .mp4 right-click menu.' } 'adv-throttling' = @{ Titre = 'Turn off Power Throttling (PowerThrottlingOff)'; Pourquoi = 'Windows throttles programs it considers "in the background" (EcoQoS) to save power. On a desktop PC we do not want to throttle anything: Discord, your launcher, the overlay run at full speed even behind the game.'; Attention = 'On a laptop, less battery life. On a desktop, nothing.' } 'adv-nagle' = @{ Titre = 'Turn off Nagle''s algorithm (TcpAckFrequency, TCPNoDelay) on the active card'; Pourquoi = 'Nagle groups small TCP packets before sending them, and delays acknowledgments. A few ms saved on a game using TCP (MMOs, some Unity games). Zero effect on a game using UDP, which is nearly every FPS.'; Attention = 'A few more small packets on the line. Nothing visible.' } 'adv-dyntick' = @{ Titre = 'Turn off dynamic tick (bcdedit disabledynamictick)'; Pourquoi = 'The kernel stops its clock when nothing happens and restarts it on demand. With a 0.5 ms timer this can drift. Check this only if you see micro-stutter that RivaTuner confirms, and uncheck it if nothing changes.'; Attention = 'Idle power draw a bit higher.' } 'jeu-mpo' = @{ Titre = 'Turn off Multiplane Overlay (MPO, OverlayTestMode = 5)'; Pourquoi = 'MPO lets the graphics card draw some windows directly, bypassing the Windows compositor (DWM). It is the cause of the black screens, flickering and windowed stutter that NVIDIA documents (article 5157, 2022) and that AMD cards know too. Off, DWM composes everything: zero effect in fullscreen, no more surprises in windowed or multi-monitor. This box sets the key, not NVCleanstall, so Restore can put it back.'; Attention = 'A video in a window costs a bit more GPU (no more hardware overlay). On 24H2 and later, Windows sometimes ignores the key: then nothing changes.' } 'adv-boost' = @{ Titre = 'CPU boost mode set to Aggressive (PERFBOOSTMODE)'; Pourquoi = 'The power plan boost mode decides how fast the CPU ramps its frequency when load arrives. Aggressive ramps it up right away instead of waiting. Intel key: on AMD the firmware handles boost.'; Attention = 'On a laptop: heat and battery for nothing. On a desktop, slightly more idle power.' } 'adv-fth' = @{ Titre = 'Turn off the Fault Tolerant Heap (FTH)'; Pourquoi = 'When a program crashes several times, Windows relaunches it with a "tolerant", slower memory allocator, without telling you. A game that crashed three times then runs throttled. With this off, it still crashes the same way but runs at full speed the rest of the time. Documented by Microsoft (FTH, Win32 apps).'; Attention = 'An old unstable program that FTH was keeping alive can start crashing again.' } 'adv-llmnr' = @{ Titre = 'Turn off LLMNR (multicast name resolution)'; Pourquoi = 'When a name is not found by DNS, Windows shouts it out over multicast on the local network (LLMNR). This is a known entry point for credential interception (Responder) and pointless network noise. A standard enterprise security recommendation.'; Attention = 'Typing \\PC-NAME to reach another PC at home may stop working (use its IP or enable mDNS on the NAS side).' } 'nv-telemetrie' = @{ Titre = 'Turn off NVIDIA telemetry'; Pourquoi = 'The driver sends statistics to NVIDIA. Two keys, no effect on gaming.'; Attention = '' } 'nv-pstate' = @{ Titre = 'Lock the card at P0 (DisableDynamicPstate)'; Pourquoi = 'At idle the card drops its clock speed, and takes a few frames to ramp back up when a scene loads all at once: that is the micro-freeze after a menu or a loading screen. This key keeps it at max clock as long as Windows runs. Verifiable with nvidia-smi (Perf P0). The "Prefer maximum performance" setting in the control panel does almost the same thing without a restart, this key is one notch further.'; Attention = 'Card runs hotter and draws more power at idle, fans that no longer stop on some cards.' } } # ===== 20-dns.ps1 ===== # --------------------------------------------------------------------------- # Test DNS : mesure les résolveurs depuis chez toi, applique celui que tu choisis, avec un secours, # le chiffrement (DNS over HTTPS) et l'IPv6 si la connexion en a. # --------------------------------------------------------------------------- function Dns-Carte { Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -and $_.InterfaceDescription -notmatch 'Virtual|VMware|Hyper-V|Tailscale|TAP|WireGuard|Bluetooth' } | Sort-Object -Property LinkSpeed -Descending | Select-Object -First 1 } # Les serveurs que la carte utilise (statiques ou reçus de la box). En IPv6, Windows rend fec0:0:0:ffff::1..3 # quand rien n'est configuré : ce sont des adresses de site obsolètes, pas des serveurs, on les retire. function Dns-Actuels($adapt, $famille = 'IPv4') { @((Get-DnsClientServerAddress -InterfaceIndex $adapt.ifIndex -AddressFamily $famille).ServerAddresses | Where-Object { $_ -and $_ -notmatch '^fec0:' }) } # Les serveurs posés à la main (vide = DHCP). C'est ce qu'on mémorise pour Tout remettre : Get-DnsClientServerAddress # rend aussi ceux de la box, et les remettre en statique aurait figé la box. function Dns-Statique($adapt, $famille = 'IPv4') { $racine = if ($famille -eq 'IPv6') { 'Tcpip6' } else { 'Tcpip' } $v = Reg-Lire "HKLM:\SYSTEM\CurrentControlSet\Services\$racine\Parameters\Interfaces\$($adapt.InterfaceGuid)" 'NameServer' @(([string]$v) -split '[,\s]+' | Where-Object { $_ }) } # La connexion a-t-elle une adresse IPv6 publique (2000::/3) ? Sans ça, un DNS en IPv6 ne répond pas. function Dns-AIpv6($adapt) { [bool](Get-NetIPAddress -InterfaceIndex $adapt.ifIndex -AddressFamily IPv6 -ErrorAction SilentlyContinue | Where-Object { $_.IPAddress -match '^[23]' }) } # Les résolveurs testés, dans l'ordre d'affichage. Cle sert au logo et à la note traduite, Serveurs[0] est celui mesuré. # Adresses relevées le 2026-09-14 sur les pages officielles : joindns4.eu/for-public (Protective), developers.cloudflare.com, # developers.google.com/speed/public-dns, quad9.net, adguard-dns.io (Default), opendns.com/setupguide (IPv6 non publié, # donc absent), docs.controld.com/docs/free-dns (p1, malware). Mullvad et dns0.eu retirés : ne répondaient pas chez le mainteneur. function Dns-Candidats($adapt) { @( @{ Cle = 'actuel'; Nom = 'Actuel (box / FAI)'; Serveurs = @(Dns-Actuels $adapt); Ipv6 = @(Dns-Actuels $adapt 'IPv6'); Doh = $null } @{ Cle = 'quad9'; Nom = 'Quad9'; Serveurs = @('9.9.9.9', '149.112.112.112'); Ipv6 = @('2620:fe::fe', '2620:fe::9'); Doh = 'https://dns.quad9.net/dns-query' } @{ Cle = 'cloudflare'; Nom = 'Cloudflare'; Serveurs = @('1.1.1.1', '1.0.0.1'); Ipv6 = @('2606:4700:4700::1111', '2606:4700:4700::1001'); Doh = 'https://cloudflare-dns.com/dns-query' } @{ Cle = 'google'; Nom = 'Google'; Serveurs = @('8.8.8.8', '8.8.4.4'); Ipv6 = @('2001:4860:4860::8888', '2001:4860:4860::8844'); Doh = 'https://dns.google/dns-query' } @{ Cle = 'dns4eu'; Nom = 'DNS4EU'; Serveurs = @('86.54.11.1', '86.54.11.201'); Ipv6 = @('2a13:1001::86:54:11:1', '2a13:1001::86:54:11:201'); Doh = 'https://protective.joindns4.eu/dns-query' } @{ Cle = 'adguard'; Nom = 'AdGuard DNS'; Serveurs = @('94.140.14.14', '94.140.15.15'); Ipv6 = @('2a10:50c0::ad1:ff', '2a10:50c0::ad2:ff'); Doh = 'https://dns.adguard-dns.com/dns-query' } @{ Cle = 'opendns'; Nom = 'OpenDNS'; Serveurs = @('208.67.222.222', '208.67.220.220'); Ipv6 = @(); Doh = 'https://dns.opendns.com/dns-query' } @{ Cle = 'controld'; Nom = 'Control D'; Serveurs = @('76.76.2.1', '76.76.10.1'); Ipv6 = @('2606:1a40::1', '2606:1a40:1::1'); Doh = 'https://freedns.controld.com/p1' } ) } # Résout 6 noms courants sur un serveur, 3 tours, garde la médiane en ms (nombre, jamais une chaîne : la virgule # décimale française cassait la conversion). Un serveur injoignable au premier tour n'a pas droit aux deux autres. function Dns-Mesurer-Un($serveur) { $noms = 'youtube.com', 'steampowered.com', 'discord.com', 'twitch.tv', 'epicgames.com', 'wikipedia.org' $temps = @() foreach ($tour in 1..3) { foreach ($d in $noms) { $t = Measure-Command { try { Resolve-DnsName -Name $d -Server $serveur -Type A -DnsOnly -NoHostsFile -ErrorAction Stop | Out-Null } catch {} } $temps += [double]$t.TotalMilliseconds Rafraichir } $tri = @($temps | Sort-Object) if ($tour -eq 1 -and $tri[[int]($tri.Count / 2)] -gt 800) { break } } $tri = @($temps | Sort-Object) [math]::Round([double]$tri[[int]($tri.Count / 2)], 1) } # Un candidat en objet de résultat (la fenêtre les remplit au fur et à mesure, Mediane = $null tant que ce n'est pas mesuré) function Dns-Resultat($c) { [pscustomobject]@{ Cle = $c.Cle; Nom = $c.Nom; Serveurs = $c.Serveurs; Ipv6 = $c.Ipv6; Doh = $c.Doh; Mediane = $null; Actuel = ($c.Cle -eq 'actuel') } } # Tous les candidats d'un coup (le journal, la fenêtre mesure un par un pour afficher au fur et à mesure) function Dns-Mesurer($adapt) { $resultats = @() foreach ($c in (Dns-Candidats $adapt)) { if (-not $c.Serveurs[0]) { continue } $r = Dns-Resultat $c $r.Mediane = Dns-Mesurer-Un $c.Serveurs[0] $resultats += $r Log ("dns {0,-20} {1,7} ms" -f $c.Nom, $r.Mediane) } $resultats } # La liste à poser : la première adresse du principal, puis le secours. Le même résolveur en secours = sa deuxième # adresse, un autre = sa première. $champ vaut Serveurs (IPv4) ou Ipv6. function Dns-Serveurs($principal, $secours, $champ) { $liste = @() if ($principal.$champ.Count -gt 0) { $liste += $principal.$champ[0] } if ($secours) { $s = if ($secours.Cle -eq $principal.Cle) { if ($principal.$champ.Count -gt 1) { $principal.$champ[1] } } else { $secours.$champ[0] } if ($s -and $s -notin $liste) { $liste += $s } } @($liste) } # Un serveur dans la liste DoH connue de Windows (Get-DnsClientDohServerAddress), avec le passage automatique en HTTPS # et le repli en clair si le HTTPS échoue. Ce que Microsoft documente pour ce cmdlet ; le drapeau par interface que # posent les Paramètres n'est pas documenté, on ne le touche pas. Rend ce qu'il y avait avant, pour Tout remettre. function Dns-Doh-Poser($ip, $modele) { $avant = Get-DnsClientDohServerAddress -ServerAddress $ip -ErrorAction SilentlyContinue if ($avant) { $etat = @{ ip = $ip; existait = $true; modele = $avant.DohTemplate; auto = [bool]$avant.AutoUpgrade; repli = [bool]$avant.AllowFallbackToUdp } Set-DnsClientDohServerAddress -ServerAddress $ip -DohTemplate $modele -AutoUpgrade $true -AllowFallbackToUdp $true -ErrorAction Stop | Out-Null } else { $etat = @{ ip = $ip; existait = $false } Add-DnsClientDohServerAddress -ServerAddress $ip -DohTemplate $modele -AutoUpgrade $true -AllowFallbackToUdp $true -ErrorAction Stop | Out-Null } $etat } # Le cmdlet DoH n'existe que sur Windows 11 (et Server 2022) : sur un Windows 10 la case est grisée. function Dns-Doh-Possible { [bool](Get-Command Add-DnsClientDohServerAddress -ErrorAction SilentlyContinue) } # Pose principal + secours sur la carte, en IPv4, en IPv6 si demandé (et si le résolveur en a), et déclare les serveurs # en DoH si demandé. Principal = la box : on remet la carte en automatique, le reste ne s'applique pas. # Mémorisé pour Tout remettre : les serveurs statiques d'avant (v4 et v6, vides = DHCP) et l'état DoH de chaque adresse touchée. function Dns-Appliquer($adapt, $principal, $secours, $doh, $ipv6) { Memoriser "dns|$($adapt.ifIndex)" @{ ifIndex = $adapt.ifIndex; serveurs = @(Dns-Statique $adapt); serveurs6 = @(Dns-Statique $adapt 'IPv6'); doh = @() } $etat = $Avant["dns|$($adapt.ifIndex)"] if ($principal.Actuel) { Set-DnsClientServerAddress -InterfaceIndex $adapt.ifIndex -ResetServerAddresses Clear-DnsClientCache SauverEtat Log "dns $($adapt.Name) = automatique ($($principal.Nom))" return } $v4 = Dns-Serveurs $principal $secours 'Serveurs' $v6 = if ($ipv6) { Dns-Serveurs $principal $secours 'Ipv6' } else { @() } Set-DnsClientServerAddress -InterfaceIndex $adapt.ifIndex -ResetServerAddresses Set-DnsClientServerAddress -InterfaceIndex $adapt.ifIndex -ServerAddresses (@($v4) + @($v6)) $dohFait = @() if ($doh -and (Dns-Doh-Possible)) { $touches = @() foreach ($r in @($principal, $secours)) { if (-not $r -or -not $r.Doh) { continue } foreach ($ip in (@($r.Serveurs) + @($r.Ipv6))) { if ($ip -in (@($v4) + @($v6)) -and $ip -notin $touches) { $touches += $ip; $dohFait += ,@($ip, $r.Doh) } } } $etats = @() foreach ($paire in $dohFait) { try { $etats += Dns-Doh-Poser $paire[0] $paire[1] } catch { Log "dns DoH $($paire[0]) : $_" } } # Memoriser ne garde que le premier passage ; l'état DoH s'ajoute à celui-ci sans écraser ce qui y était déjà. # Relu depuis le JSON, l'état est un objet et non une table, et ceux d'avant le 2026-09-14 n'ont pas de champ doh. if ($etat -isnot [hashtable] -and -not $etat.PSObject.Properties['doh']) { $etat | Add-Member -NotePropertyName doh -NotePropertyValue @() } $deja = @($etat.doh | ForEach-Object { $_.ip }) $etat.doh = @($etat.doh) + @($etats | Where-Object { $_.ip -notin $deja }) } Clear-DnsClientCache SauverEtat $detail = $v4 -join ', ' if ($v6.Count -gt 0) { $detail += ' + ' + ($v6 -join ', ') } if ($dohFait.Count -gt 0) { $detail += ', DoH' } $noms = if ($secours -and $secours.Cle -ne $principal.Cle) { "$($principal.Nom) puis $($secours.Nom)" } else { $principal.Nom } Log "dns $($adapt.Name) = $detail ($noms)" } # ===== 30-restaurer.ps1 ===== # --------------------------------------------------------------------------- # Retour arrière et application # --------------------------------------------------------------------------- function Tout-Restaurer { if ($Avant.Count -eq 0) { Log (Msg 'rienRestaurer'); return } Log ((Msg 'restauration') -f $Avant.Count) foreach ($id in @($Avant.Keys)) { $v = $Avant[$id] try { switch -Wildcard ($id) { 'reg|*' { if ($null -eq $v.valeur) { Remove-ItemProperty -Path $v.chemin -Name $v.nom -ErrorAction SilentlyContinue } else { New-ItemProperty -Path $v.chemin -Name $v.nom -Value $v.valeur -PropertyType $v.type -Force | Out-Null } } 'svc|*' { if ($null -ne $v.start) { Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$($v.nom)" -Name 'Start' -Value $v.start } } 'pwr|*' { if ($null -ne $v.valeur) { powercfg /setacvalueindex SCHEME_CURRENT $v.sousGroupe $v.reglage $v.valeur | Out-Null powercfg /setdcvalueindex SCHEME_CURRENT $v.sousGroupe $v.reglage $v.valeur | Out-Null } elseif ($v.cle -and (Test-Path $v.cle)) { Remove-Item -Path $v.cle -Recurse -Force -ErrorAction SilentlyContinue # pas de valeur avant = défaut Windows } } 'cmd|hibernation' { if ($v.actif) { powercfg /h on | Out-Null } } 'cmd|bootmenupolicy' { if ($v.valeur) { bcdedit /set '{current}' bootmenupolicy $v.valeur | Out-Null } } 'cmd|dyntick' { if ($v.valeur) { bcdedit /set '{current}' disabledynamictick $v.valeur | Out-Null } else { bcdedit /deletevalue '{current}' disabledynamictick 2>$null | Out-Null } } 'cmd|reserve' { if ($v.etat -eq 'Enabled') { Set-WindowsReservedStorageState -State Enabled -ErrorAction SilentlyContinue | Out-Null } } 'cmd|menuclassique' { if (-not $v.existait) { Remove-Item -Path 'HKCU:\SOFTWARE\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}' -Recurse -Force -ErrorAction SilentlyContinue } Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue } 'cmd|corbeille' { if (-not $v.existait) { Remove-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{645FF040-5081-101B-9F08-00AA002F954E}' -Recurse -Force -ErrorAction SilentlyContinue } } 'cmd|timer' { # l'item n'existe plus (retiré le 2026-09-14), on garde le retour arrière pour ceux qui l'avaient coché if (-not $v.existait) { schtasks /Delete /TN 'bagarre timer' /F 2>$null | Out-Null } Get-Process SetTimerResolution -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue } 'task|*' { if ($v.etat -ne 'Disabled') { Enable-ScheduledTask -TaskPath $v.chemin -TaskName $v.nom -ErrorAction SilentlyContinue | Out-Null } } 'netpm|*' { if ($v.valeur -eq 'Enabled') { Enable-NetAdapterPowerManagement -Name $v.carte -ErrorAction SilentlyContinue } } 'netadv|*' { Set-NetAdapterAdvancedProperty -Name $v.carte -RegistryKeyword $v.mot -RegistryValue $v.valeur -ErrorAction SilentlyContinue } 'netb|*' { if ($v.actif) { Enable-NetAdapterBinding -Name $v.carte -ComponentID $v.composant -ErrorAction SilentlyContinue } } 'dns|*' { # serveurs = statiques IPv4 d'avant, serveurs6 = IPv6 (absents dans les états d'avant le 2026-09-14), vides = DHCP $liste = @($v.serveurs) + @($v.serveurs6) | Where-Object { $_ } Set-DnsClientServerAddress -InterfaceIndex $v.ifIndex -ResetServerAddresses if ($liste.Count -gt 0) { Set-DnsClientServerAddress -InterfaceIndex $v.ifIndex -ServerAddresses $liste } foreach ($d in @($v.doh)) { if (-not $d -or -not $d.ip) { continue } if ($d.existait) { Set-DnsClientDohServerAddress -ServerAddress $d.ip -DohTemplate $d.modele -AutoUpgrade ([bool]$d.auto) -AllowFallbackToUdp ([bool]$d.repli) -ErrorAction SilentlyContinue | Out-Null } else { Remove-DnsClientDohServerAddress -ServerAddress $d.ip -ErrorAction SilentlyContinue | Out-Null } } Clear-DnsClientCache } } Log ((Msg 'restaure') -f $id) } catch { Log ((Msg 'echecRestauration') -f $id, $_) } } powercfg /setactive SCHEME_CURRENT | Out-Null $Avant.Clear() Remove-Item $EtatFichier -ErrorAction SilentlyContinue Log (Msg 'finRestauration') } function Appliquer-Items($liste) { $liste = @($liste) if ($liste.Count -eq 0) { Log (Msg 'rienCoche'); return } Log ((Msg 'application') -f $liste.Count) $barre = if ($Ctl) { $Ctl.Progression } else { $null } if ($barre) { $barre.Value = 0; $barre.Visibility = 'Visible' } $n = 0 foreach ($it in $liste) { Log "> $($it.Titre)" try { & $it.Appliquer } catch { Log ((Msg 'echecItem') -f $it.Id, $_) } SauverEtat $n++ if ($barre) { $barre.Value = 100 * $n / $liste.Count; Rafraichir } } if ($barre) { $barre.Visibility = 'Collapsed' } # Un item qui touche l'Explorateur (menu clic droit) demande une relance : une seule, après tous les items. if ($Bagarre.RelancerExplorer) { Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue; $Bagarre.RelancerExplorer = $false } Log ((Msg 'finApplication') -f $EtatFichier, $LogFichier) } # ===== 40-collecte.ps1 ===== # --------------------------------------------------------------------------- # Audit IA : photographie du PC dans un rapport texte anonymisé (ex collecte.ps1). Ne modifie rien. # --------------------------------------------------------------------------- function Collecter-Rapport($Sortie) { $ErrorActionPreference = 'SilentlyContinue' $Admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) $sb = New-Object System.Text.StringBuilder function Titre($t) { [void]$sb.AppendLine(''); [void]$sb.AppendLine("=== $t ==="); Write-Host " $t"; Rafraichir } function Ligne($t) { [void]$sb.AppendLine([string]$t) } function Bloc($obj) { if ($null -ne $obj) { ($obj | Out-String -Width 200).TrimEnd() -split "`r?`n" | ForEach-Object { Ligne $_ } } } function Reg($chemin, $nom) { $v = (Get-ItemProperty -Path $chemin -Name $nom).$nom if ($null -eq $v) { 'absent' } else { $v } } # Valeur vide = commande qui demande l'administrateur (ou objet absent) function Val($v) { if ($null -eq $v -or [string]$v -eq '') { if ($Admin) { 'inconnu' } else { 'inconnu (admin requis)' } } else { [string]$v } } # Commande qui lève une exception sans admin : on l'attrape et on passe par Val function Essai([scriptblock]$bloc) { $v = $null; try { $v = & $bloc } catch { $v = $null }; Val $v } function Ou($v) { if ($null -eq $v) { 'absent' } else { [string]$v } } Write-Host '' Write-Host ' Collecte en cours, environ 30 secondes.' -ForegroundColor Cyan Ligne "RAPPORT PC pour audit IA, généré le $(Get-Date -Format 'yyyy-MM-dd HH:mm'), admin=$Admin" Ligne 'Rien de personnel : pas de nom de compte, pas de mot de passe, pas de clé de licence.' Titre 'Système' $os = Get-CimInstance Win32_OperatingSystem $cs = Get-CimInstance Win32_ComputerSystem Ligne "Windows : $($os.Caption) $($os.Version) build $($os.BuildNumber), installé le $($os.InstallDate.ToString('yyyy-MM-dd'))" Ligne "Version affichée : $(Reg 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' 'DisplayVersion')" Ligne "Machine : $($cs.Manufacturer) $($cs.Model), type $($cs.PCSystemType) (1 = fixe, 2 = portable)" Ligne "Carte mère : $((Get-CimInstance Win32_BaseBoard).Manufacturer) $((Get-CimInstance Win32_BaseBoard).Product), BIOS $((Get-CimInstance Win32_BIOS).SMBIOSBIOSVersion) du $((Get-CimInstance Win32_BIOS).ReleaseDate.ToString('yyyy-MM-dd'))" $cpu = Get-CimInstance Win32_Processor Ligne "CPU : $($cpu.Name), $($cpu.NumberOfCores) cœurs / $($cpu.NumberOfLogicalProcessors) threads, $($cpu.MaxClockSpeed) MHz" Ligne "RAM : $([math]::Round($cs.TotalPhysicalMemory / 1GB)) Go, $(($mem = Get-CimInstance Win32_PhysicalMemory) | Measure-Object | Select-Object -ExpandProperty Count) barrettes à $($mem[0].Speed) MT/s" Ligne "Uptime : $([math]::Round(((Get-Date) - $os.LastBootUpTime).TotalHours, 1)) h" Ligne "Sécurité : HVCI (intégrité mémoire) = $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity' 'Enabled'), Secure Boot = $(Essai { Confirm-SecureBootUEFI })" Ligne "Virtualisation : Hyper-V présent = $(Essai { (Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All).State }), VirtualMachinePlatform = $(Essai { (Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform).State })" Titre 'GPU et écrans' Get-CimInstance Win32_VideoController | ForEach-Object { Ligne "GPU : $($_.Name), pilote $($_.DriverVersion) du $($_.DriverDate.ToString('yyyy-MM-dd')), $($_.CurrentHorizontalResolution)x$($_.CurrentVerticalResolution) @ $($_.CurrentRefreshRate) Hz" } $nvKey = Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}' | Where-Object { (Get-ItemProperty $_.PSPath).DriverDesc -match 'NVIDIA' } | Select-Object -First 1 if ($nvKey) { $p = Get-ItemProperty $nvKey.PSPath Ligne "NVIDIA VRAM : $([math]::Round($p.'HardwareInformation.qwMemorySize' / 1GB)) Go" Ligne "NVIDIA clé pilote : DisableDynamicPstate=$(Ou $p.DisableDynamicPstate) RMHdcpKeyglobZero=$(Ou $p.RMHdcpKeyglobZero) (1 = HDCP coupé) MPO(OverlayTestMode)=$(Reg 'HKLM:\SOFTWARE\Microsoft\Windows\Dwm' 'OverlayTestMode') (5 = MPO coupé)" } Ligne "NVIDIA services : $((Get-Service Nv* | ForEach-Object { "$($_.Name)=$($_.StartType)/$($_.Status)" }) -join ', ')" Ligne "NVIDIA App / GFE installé : $([bool](Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' | Where-Object { $_.DisplayName -match 'NVIDIA (App|GeForce Experience)' }))" Ligne "Panneau NVIDIA (Store) : $([bool](Get-AppxPackage NVIDIACorp.NVIDIAControlPanel))" Ligne "Optimisations jeux fenêtrés / HAGS : DirectXUserGlobalSettings = $(Reg 'HKCU:\SOFTWARE\Microsoft\DirectX\UserGpuPreferences' 'DirectXUserGlobalSettings'), HwSchMode = $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\GraphicsDrivers' 'HwSchMode') (2 = HAGS activé)" Ligne "Game DVR : AppCaptureEnabled=$(Reg 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR' 'AppCaptureEnabled') AllowGameDVR(policy)=$(Reg 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR' 'AllowGameDVR') GameMode(AutoGameModeEnabled)=$(Reg 'HKCU:\SOFTWARE\Microsoft\GameBar' 'AutoGameModeEnabled')" Ligne "Pilote inpoutx64.sys présent (MSI Util / outils d'accès matériel, bloqué par KB5121003) : $(Test-Path "$env:SystemRoot\System32\drivers\inpoutx64.sys")" Titre 'Interruptions MSI des périphériques PCI (GPU, réseau, USB, stockage)' Get-CimInstance Win32_PnPEntity | Where-Object { $_.PNPClass -in 'Display', 'Net', 'USB', 'SCSIAdapter', 'HDC', 'MEDIA' -and $_.DeviceID -like 'PCI\*' } | ForEach-Object { $k = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties" $msi = if (Test-Path $k) { Reg $k 'MSISupported' } else { 'pas de clé' } $prio = Reg "HKLM:\SYSTEM\CurrentControlSet\Enum\$($_.DeviceID)\Device Parameters\Interrupt Management\Affinity Policy" 'DevicePriority' Ligne "$($_.PNPClass.PadRight(12)) MSI=$msi prio=$prio $($_.Name)" } Titre 'Disques' Get-PhysicalDisk | ForEach-Object { Ligne "$($_.FriendlyName) : $($_.MediaType) $($_.BusType) $([math]::Round($_.Size / 1GB)) Go, santé $($_.HealthStatus)" } Get-Volume | Where-Object DriveLetter | ForEach-Object { Ligne "$($_.DriveLetter): $($_.FileSystem) $([math]::Round($_.SizeRemaining / 1GB)) Go libres sur $([math]::Round($_.Size / 1GB))" } Ligne "Fichier d'échange : $((Get-CimInstance Win32_PageFileUsage | ForEach-Object { "$($_.Name) $($_.AllocatedBaseSize) Mo" }) -join ', ') ; géré auto = $((Get-CimInstance Win32_ComputerSystem).AutomaticManagedPagefile)" Ligne "Veille prolongée : HibernateEnabled = $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\Power' 'HibernateEnabled'), démarrage rapide HiberbootEnabled = $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power' 'HiberbootEnabled')" Ligne "Stockage réservé : $(Essai { (Get-WindowsReservedStorageState).ReservedStorageState })" Ligne "TRIM : $(fsutil behavior query DisableDeleteNotify)" Titre 'Alimentation' Ligne "Plan actif : $(powercfg /getactivescheme)" # Lecture dans le registre : marche aussi pour les réglages cachés que powercfg /query n'affiche pas $schema = ((powercfg /getactivescheme) -replace '.*:\s*([0-9a-f-]{36}).*', '$1') function Pwr($sub, $set) { $k = "HKLM:\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\$schema\$sub\$set" if (-not (Test-Path $k)) { return 'défaut du plan (pas de valeur propre)' } $p = Get-ItemProperty $k "AC=$($p.ACSettingIndex) DC=$($p.DCSettingIndex)" } Ligne "Core parking (CPMINCORES, 100 = pas de parking) : $(Pwr '54533251-82be-4824-96c1-47b60b740d00' '0cc5b647-c1df-4637-891a-dec35c318583')" Ligne "Processeur min (%) : $(Pwr '54533251-82be-4824-96c1-47b60b740d00' '893dee8e-2bef-41e0-89c6-b55d0929964c')" Ligne "USB suspension sélective : $(Pwr '2a737441-1930-4402-8d77-b2bebba308a3' '48e6b7a6-50f5-4782-a5d4-53bb50f7e81d')" Ligne "PCIe ASPM : $(Pwr '501a4d13-42af-4429-9fd1-a8218c268e20' 'ee12f906-d277-404b-b6da-e5fa1a576df5')" Ligne "Power Throttling off : $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling' 'PowerThrottlingOff')" Ligne "bcdedit : $(Val (((bcdedit /enum '{current}' | Select-String 'bootmenupolicy|disabledynamictick|useplatformclock|useplatformtick|tscsyncpolicy') -replace '\s+', ' ') -join ' ; '))" Titre 'Timer et planificateur' Ligne "GlobalTimerResolutionRequests : $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\kernel' 'GlobalTimerResolutionRequests')" $tt = Get-ScheduledTask -TaskName 'bagarre timer' Ligne "Tâche 'bagarre timer' : $(if ($tt) { $tt.State } else { 'absente' })" Ligne "Processus timer en cours : $((Get-Process SetTimerResolution, TimerResolution, ISLC, ProcessLasso | ForEach-Object Name) -join ', ')" Ligne "Win32PrioritySeparation : $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl' 'Win32PrioritySeparation') (2 = défaut, 38 = 0x26)" Ligne "SvcHostSplitThresholdInKB : $(Reg 'HKLM:\SYSTEM\CurrentControlSet\Control' 'SvcHostSplitThresholdInKB') (défaut 380000)" Ligne "Processus en cours : $((Get-Process).Count), dont svchost : $((Get-Process svchost).Count)" Ligne "Top 10 CPU maintenant :" Bloc (Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, @{n = 'CPUsec'; e = { [math]::Round($_.CPU) } }, @{n = 'RAMMo'; e = { [math]::Round($_.WorkingSet64 / 1MB) } } | Format-Table -AutoSize) Titre 'Souris et clavier' $m = Get-ItemProperty 'HKCU:\Control Panel\Mouse' Ligne "Accélération : MouseSpeed=$($m.MouseSpeed) Threshold1=$($m.MouseThreshold1) Threshold2=$($m.MouseThreshold2) (0/0/0 = coupée), sensibilité Windows MouseSensitivity=$($m.MouseSensitivity) (10 = 6/11), RawMouseThrottleDuration=$($m.RawMouseThrottleDuration)" Ligne "Files d'attente : souris MouseDataQueueSize=$(Reg 'HKLM:\SYSTEM\CurrentControlSet\Services\mouclass\Parameters' 'MouseDataQueueSize') clavier KeyboardDataQueueSize=$(Reg 'HKLM:\SYSTEM\CurrentControlSet\Services\kbdclass\Parameters' 'KeyboardDataQueueSize')" Ligne "Souris USB : $((Get-CimInstance Win32_PointingDevice | ForEach-Object Name) -join ', ')" Titre 'Réseau' Get-NetAdapter -Physical | ForEach-Object { $a = $_ Ligne "Carte : $($a.Name) ($($a.InterfaceDescription)), $($a.Status), $($a.LinkSpeed), pilote $($a.DriverVersionString) du $($a.DriverDate)" if ($a.Status -ne 'Up') { return } $pm = Get-NetAdapterPowerManagement -Name $a.Name Ligne " Peut être éteinte par Windows : $(Val $pm.AllowComputerToTurnOffDevice)" Get-NetAdapterAdvancedProperty -Name $a.Name | Where-Object { $_.DisplayName -match 'Energy|Green|Power Sav|Interrupt Moderation|Receive Buffers|Transmit Buffers|Jumbo|Flow Control|Speed|RSS|Offload' } | ForEach-Object { Ligne " $($_.DisplayName) = $($_.DisplayValue)" } Get-NetAdapterBinding -Name $a.Name | ForEach-Object { Ligne " liaison $($_.ComponentID) $($_.DisplayName) = $($_.Enabled)" } $g = $a.InterfaceGuid Ligne " Nagle : TcpAckFrequency=$(Reg "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\$g" 'TcpAckFrequency') TCPNoDelay=$(Reg "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\$g" 'TCPNoDelay')" } Ligne "DNS : $((Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object ServerAddresses | ForEach-Object { "$($_.InterfaceAlias)=$($_.ServerAddresses -join '/')" }) -join ' ; ')" Ligne "Latence vers 1.1.1.1 : $((Test-Connection 1.1.1.1 -Count 4 | Measure-Object ResponseTime -Average).Average) ms (moyenne sur 4)" $tcp = Get-NetTCPSetting -SettingName Internet Ligne "TCP global : AutoTuning=$($tcp.AutoTuningLevelLocal) Congestion=$($tcp.CongestionProvider) ECN=$($tcp.EcnCapability)" Ligne "Optimisation de la distribution (DODownloadMode) : $(Reg 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization' 'DODownloadMode') (policy) / $(Reg 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config' 'DODownloadMode') (config)" Titre 'Vie privée et bloat' Ligne "AllowTelemetry (policy) : $(Reg 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' 'AllowTelemetry')" Ligne "Copilot coupé (TurnOffWindowsCopilot) : $(Reg 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\WindowsCopilot' 'TurnOffWindowsCopilot'), Recall (DisableAIDataAnalysis) : $(Reg 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsAI' 'DisableAIDataAnalysis'), Widgets (AllowNewsAndInterests) : $(Reg 'HKLM:\SOFTWARE\Policies\Microsoft\Dsh' 'AllowNewsAndInterests')" Ligne "Identifiant pub : $(Reg 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo' 'Enabled'), Bing dans Démarrer : $(Reg 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search' 'BingSearchEnabled')" Ligne "Windows Update pilotes exclus : $(Reg 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' 'ExcludeWUDriversInQualityUpdate'), DriverSearching : $(Reg 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching' 'SearchOrderConfig')" Ligne "Applis Store (hors framework) : $((Get-AppxPackage | Where-Object { -not $_.IsFramework -and $_.SignatureKind -eq 'Store' }).Count)" Ligne "Applis Store connues pour être du bloat encore présentes :" Get-AppxPackage | Where-Object { $_.Name -match 'Xbox|Bing|Clipchamp|Teams|Todos|Solitaire|ZuneMusic|ZuneVideo|People|GetHelp|Getstarted|Copilot|OutlookForWindows|LinkedIn|QuickAssist|PowerAutomate|Cortana|3DViewer|MixedReality|Maps|FeedbackHub|WindowsAlarms|YourPhone|Family' } | ForEach-Object { Ligne " $($_.Name)" } $progs = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' | Where-Object { $_.DisplayName -and -not $_.SystemComponent } $jeux = $progs | Where-Object { $_.UninstallString -match 'steam|epicgames|GOG|Ubisoft|Battle\.net|EA Desktop' } Ligne "Jeux (Steam / Epic / GOG / Ubisoft / EA) : $($jeux.Count), non listés" Ligne "Programmes installés (hors jeux et hors composants Windows) :" $progs | Where-Object { $jeux.DisplayName -notcontains $_.DisplayName -and $_.DisplayName -notmatch '^(Microsoft Visual C\+\+|Microsoft \.NET|Windows SDK|Microsoft Edge|Microsoft Update Health|Microsoft OneDrive)' } | Sort-Object DisplayName -Unique | ForEach-Object { Ligne " $($_.DisplayName) $($_.DisplayVersion)" } Titre 'Démarrage automatique' Get-CimInstance Win32_StartupCommand | ForEach-Object { Ligne "$($_.Location) : $($_.Name) = $($_.Command)" } function Cles-Run($chemin) { @((Get-ItemProperty $chemin).PSObject.Properties | Where-Object { $_.Name -notmatch '^PS' } | ForEach-Object { $_.Name }) -join ', ' } Ligne "Run (HKLM) : $(Cles-Run 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run')" Ligne "Run (HKCU) : $(Cles-Run 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run')" Ligne "StartupDelayInMSec : $(Reg 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Serialize' 'StartupDelayInMSec')" Titre 'Services : ceux qui tournent en automatique (hors Microsoft de base) et ceux que le pack coupe' $pack = 'DiagTrack', 'dmwappushservice', 'lfsvc', 'PhoneSvc', 'MapsBroker', 'RetailDemo', 'WerSvc', 'Fax', 'PcaSvc', 'XblAuthManager', 'XblGameSave', 'XboxNetApiSvc', 'edgeupdate', 'edgeupdatem', 'WMPNetworkSvc', 'wisvc', 'DPS', 'WdiServiceHost', 'WdiSystemHost', 'CDPSvc', 'Spooler', 'WSearch', 'SysMain', 'BITS', 'bthserv', 'BTAGService', 'NvTelemetryContainer' Get-Service | Where-Object { $_.Name -in $pack } | ForEach-Object { Ligne "pack $($_.Name.PadRight(22)) $($_.StartType)/$($_.Status)" } Ligne '---' Get-CimInstance Win32_Service | Where-Object { $_.StartMode -eq 'Auto' -and $_.PathName -notmatch 'svchost|\\Windows\\' } | ForEach-Object { Ligne "auto $($_.Name.PadRight(22)) $($_.State.PadRight(8)) $($_.PathName)" } Titre 'Tâches planifiées de télémétrie' '\Microsoft\Windows\Application Experience\', '\Microsoft\Windows\Customer Experience Improvement Program\', '\Microsoft\Windows\DiskDiagnostic\', '\Microsoft\Windows\Feedback\Siuf\', '\Microsoft\Windows\Windows Error Reporting\' | ForEach-Object { Get-ScheduledTask -TaskPath $_ | ForEach-Object { Ligne "$($_.TaskPath)$($_.TaskName) = $($_.State)" } } Titre 'Defender' $mp = Get-MpPreference if ($mp) { Ligne "Exclusions dossiers : $(($mp.ExclusionPath) -join ' ; ')" Ligne "Exclusions processus : $(($mp.ExclusionProcess) -join ' ; ')" Ligne "Analyse planifiée : jour $($mp.ScanScheduleDay) à $($mp.ScanScheduleTime), CPU max $($mp.ScanAvgCPULoadFactor) %" } else { Ligne 'Get-MpPreference indisponible (pas admin ou autre antivirus).' } Ligne "Autre antivirus : $((Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | ForEach-Object displayName) -join ', ')" Titre 'Script bagarre' if (Test-Path $EtatFichier) { $etat = Get-Content $EtatFichier -Raw | ConvertFrom-Json Ligne "bagarre-avant.json trouvé ($((Get-Item $EtatFichier).LastWriteTime.ToString('yyyy-MM-dd HH:mm'))), réglages appliqués : $(($etat.PSObject.Properties | ForEach-Object Name) -join ', ')" } else { Ligne 'bagarre-avant.json introuvable : le script à cocher n''a pas été appliqué sur ce PC, ou a été restauré.' } Titre 'Événements récents (erreurs système et WHEA, 7 jours)' Get-WinEvent -FilterHashtable @{ LogName = 'System'; Level = 1, 2; StartTime = (Get-Date).AddDays(-7) } -MaxEvents 300 | Group-Object ProviderName | Sort-Object Count -Descending | Select-Object -First 15 | ForEach-Object { Ligne "$($_.Count.ToString().PadLeft(4)) x $($_.Name) : $(($_.Group[0].Message -split "`n")[0].Substring(0, [math]::Min(120, ($_.Group[0].Message -split "`n")[0].Length)))" } # Anonymisation : nom du compte Windows et SID retirés $texte = $sb.ToString() -replace '(?i)C:\\Users\\[^\\"]+', 'C:\Users\' -replace 'HKU\\S-1-5-21-[\d-]+', 'HKCU' -replace [regex]::Escape($env:USERNAME), '' [IO.File]::WriteAllText($Sortie, $texte, (New-Object System.Text.UTF8Encoding $true)) Log ((Msg 'rapportEcrit') -f $Sortie, [math]::Round((Get-Item $Sortie).Length / 1KB)) } # ===== 50-fenetre.ps1 ===== # --------------------------------------------------------------------------- # Mode -Liste : le catalogue en texte, sans rien appliquer (test) # --------------------------------------------------------------------------- if ($Liste) { Write-Host "Machine : $Machine" $Items | ForEach-Object { '{0,-24} {1} {2}' -f $_.Id, $(if ($_.Coche) { '[x]' } else { '[ ]' }), $_.Titre } return } # --------------------------------------------------------------------------- # Textes de l'interface, français et anglais. Les tutos sont dans $Textes (un fichier par page, balisé : # "## " ouvre une carte, "@Id, Id2" pose des boutons, "! " une mise en garde, "> " une commande, "- " une puce), # les items dans le catalogue (français) et $TraductionsEn (anglais). # --------------------------------------------------------------------------- $PagesNoms = 'Accueil', 'Installation', 'Facile', 'Optis', 'Nvidia', 'Dns', 'Dur', 'Maintenance', 'Audit' $UI = @{ fr = @{ nav = 'Accueil', 'Installation', 'Facile', 'Le script à cocher', 'NVIDIA', 'DNS', 'Dur', 'Maintenance', 'Audit IA' resume = '', 'Windows propre, mises à jour, pilotes', 'débloat en deux clics, librairies, son', 'services, vie privée, jeu, réseau, confort', 'pilote sans NVIDIA App, Panneau de configuration', 'le résolveur le plus rapide depuis chez toi', 'une opti à la fois, mesurée', 'nettoyer et vérifier, des mois après', 'une IA vérifie ton PC' titres = @{ Accueil = 'Tu viens de réinstaller Windows 11 ?'; Installation = 'Windows propre, mises à jour, pilotes' Facile = 'Débloat en deux clics, librairies, son'; Optis = 'Le script à cocher' Nvidia = 'Le pilote NVIDIA et son Panneau de configuration'; Dur = 'Une opti à la fois, mesurée' Maintenance = 'Entretien, des mois après'; Dns = 'Le DNS le plus rapide depuis chez toi'; Audit = 'Une IA vérifie ton PC' } survole = 'Passe la souris sur une ligne pour lire le pourquoi et ce que tu perds.'; pourquoi = 'Pourquoi'; perds = 'Ce que tu perds'; rien = 'Rien de notable.' appliquerN = 'Appliquer les {0} cases cochées'; appliquer0 = 'Appliquer (rien de coché)'; appliquer1 = 'Appliquer la case cochée' legende = 'Coché = fait quand tu cliques Appliquer. Décoché = rien ne change. Si tu ne comprends pas une ligne, ne la coche pas.' seraFait = 'sera fait'; laisse = 'laissé tel quel'; dejaFait = 'déjà fait' langue = 'Français' rienCoche = 'Rien de coché.'; confirmAppliquer = "Appliquer {0} réglages ?`n`nL'état d'avant est sauvé dans {1}, le bouton Tout remettre le restaure." termine = 'Terminé. Redémarre le PC pour que tout prenne effet.'; rienRestaurer = 'Rien à restaurer : aucun réglage appliqué sur ce PC.' confirmRestaurer = 'Remettre les {0} réglages comme avant ?'; restaure = 'Restauré. Redémarre le PC.' aucuneCarte = 'Aucune carte réseau active trouvée.'; dnsCarte = 'Carte {0} ({1}). DNS actuel : {2}, souvent ta box.' dnsEnCours = 'Test DNS en cours...'; dnsFini = 'Test terminé. Un clic sur une ligne choisit le principal, un deuxième le secours, puis "Utiliser les DNS choisis".' dnsSelection = 'Clique d''abord une ligne de résultat.'; dnsBox = 'box'; dnsRapide = 'le plus rapide'; dnsTest = 'test en cours' dnsResume1 = 'Principal {0} ({1}). Un deuxième clic choisit le secours, la même ligne donne sa deuxième adresse.' dnsResume2 = 'Principal {0} ({1}), secours {2} ({3}).'; dnsResumeBox = 'La carte repasse en automatique, sur le DNS de ta box.' dnsDoh = 'Chiffrer les requêtes (DNS over HTTPS)'; dnsDohTip = 'Windows passe en HTTPS avec ces serveurs et revient en clair si ça échoue. Ta box et ton FAI ne lisent plus les noms que tu demandes.'; dnsDohAbsent = 'Windows 11 seulement.' dnsIpv6 = 'Aussi en IPv6'; dnsIpv6Tip = 'Coché d''office quand ta connexion a une adresse IPv6 publique. OpenDNS ne publie pas d''adresse IPv6, la case ne change rien pour lui.' dnsNotes = @{ actuel = 'ce que tu as aujourd''hui, ta box ou ton FAI'; quad9 = 'bloque les sites malveillants, pas de journal'; cloudflare = 'souvent le plus rapide, aucun filtre'; google = 'rapide, garde des journaux'; dns4eu = 'européen, bloque les sites malveillants'; adguard = 'bloque les pubs et les traqueurs'; opendns = 'Cisco, filtre familial en option'; controld = 'bloque les sites malveillants' } preset = 'Sélection'; presetRecommande = 'Recommandé'; presetMinimal = 'Minimal (rien à perdre)'; presetAucun = 'Tout décocher'; presetPerso = 'Personnalisé' presetTips = @{ recommande = 'Les cases sûres, cochées à l''ouverture.'; minimal = 'Seulement les cases dont la contrepartie est vide : rien à perdre.'; aucun = 'Aucune case cochée.' } ou = 'ou' collecte = 'Collecte en cours, environ 30 secondes...'; promptCopie = 'Prompt copié dans le presse-papiers. Colle-le dans ton IA avec rapport-pc.txt.' commandeCopiee = 'Commande copiée. Colle-la dans un Terminal pour rouvrir bagarre.' pasRapport = "Pas encore de rapport : bouton 1 d'abord."; pasJournal = 'Pas encore de journal.' dejaApplique = '{0} réglages déjà appliqués sur ce PC (bagarre-avant.json). Tout remettre les restaure.' ouverte = 'Fenêtre ouverte. Si tu ne la vois pas, regarde la barre des tâches : elle peut être derrière ce terminal.' filtrer = 'Chercher une ligne'; coches = 'cochées' detection = 'Détection de ce qui est déjà en place sur ce PC...' detectionFin = '{0} réglages déjà en place, décochés et marqués "déjà fait". Le reste est à faire.' vieuxTitre = 'Ton installation Windows a {0}.' vieuxTexte = "C'est pas que je suis pas sûr de mon script, mais on sait jamais. Il faut toujours se protéger." vieuxRestauration = 'Créer un point de restauration'; vieuxSauvegarde = 'Sauvegarder mes fichiers'; vieuxContinuer = 'Continuer quand même' an = 'an', 'ans'; mois = 'mois', 'mois'; jour = 'jour', 'jours'; et = 'et' } en = @{ nav = 'Home', 'Install', 'Easy', 'The checkbox script', 'NVIDIA', 'DNS', 'Hard', 'Maintenance', 'AI audit' resume = '', 'clean Windows, updates, drivers', 'debloat in two clicks, libraries, sound', 'services, privacy, gaming, network, comfort', 'driver without the NVIDIA App, Control Panel', 'the fastest resolver from your place', 'one tweak at a time, measured', 'clean and check, months later', 'an AI checks your PC' titres = @{ Accueil = 'Just reinstalled Windows 11?'; Installation = 'Clean Windows, updates, drivers' Facile = 'Debloat in two clicks, libraries, sound'; Optis = 'The checkbox script' Nvidia = 'The NVIDIA driver and its Control Panel'; Dur = 'One tweak at a time, measured' Maintenance = 'Upkeep, months later'; Dns = 'The fastest DNS from your place'; Audit = 'An AI checks your PC' } survole = 'Hover a line to read the why and what you lose.'; pourquoi = 'Why'; perds = 'What you lose'; rien = 'Nothing notable.' appliquerN = 'Apply the {0} checked boxes'; appliquer0 = 'Apply (nothing checked)'; appliquer1 = 'Apply the checked box' legende = 'Checked = done when you click Apply. Unchecked = nothing changes. If you do not understand a line, do not check it.' seraFait = 'will be done'; laisse = 'left as is'; dejaFait = 'already done' langue = 'English' rienCoche = 'Nothing checked.'; confirmAppliquer = "Apply {0} settings?`n`nThe previous state is saved in {1}, the Restore button puts it back." termine = 'Done. Reboot the PC so everything takes effect.'; rienRestaurer = 'Nothing to restore: no setting applied on this PC.' confirmRestaurer = 'Put the {0} settings back as they were?'; restaure = 'Restored. Reboot the PC.' aucuneCarte = 'No active network card found.'; dnsCarte = 'Card {0} ({1}). Current DNS: {2}, usually your router.' dnsEnCours = 'DNS test running...'; dnsFini = 'Test done. One click on a line picks the primary, a second the fallback, then "Use the chosen DNS".' dnsSelection = 'Click a result line first.'; dnsBox = 'router'; dnsRapide = 'fastest'; dnsTest = 'testing' dnsResume1 = 'Primary {0} ({1}). A second click picks the fallback, the same line gives its second address.' dnsResume2 = 'Primary {0} ({1}), fallback {2} ({3}).'; dnsResumeBox = 'The card goes back to automatic, on your router DNS.' dnsDoh = 'Encrypt queries (DNS over HTTPS)'; dnsDohTip = 'Windows switches to HTTPS with these servers and falls back to plain text if that fails. Your router and your ISP no longer read the names you ask for.'; dnsDohAbsent = 'Windows 11 only.' dnsIpv6 = 'IPv6 too'; dnsIpv6Tip = 'Ticked by default when your connection has a public IPv6 address. OpenDNS publishes no IPv6 address, the box changes nothing for it.' dnsNotes = @{ actuel = 'what you have today, your router or your ISP'; quad9 = 'blocks malicious sites, no logs'; cloudflare = 'often the fastest, no filtering'; google = 'fast, keeps logs'; dns4eu = 'European, blocks malicious sites'; adguard = 'blocks ads and trackers'; opendns = 'Cisco, optional family filter'; controld = 'blocks malicious sites' } preset = 'Preset'; presetRecommande = 'Recommended'; presetMinimal = 'Minimal (nothing to lose)'; presetAucun = 'Untick everything'; presetPerso = 'Custom' presetTips = @{ recommande = 'The safe boxes, ticked when the window opens.'; minimal = 'Only the boxes whose tradeoff is empty: nothing to lose.'; aucun = 'No box ticked.' } ou = 'or' collecte = 'Collecting, about 30 seconds...'; promptCopie = 'Prompt copied to the clipboard. Paste it into your AI along with rapport-pc.txt.' commandeCopiee = 'Command copied. Paste it into a Terminal to reopen bagarre.' pasRapport = 'No report yet: button 1 first.'; pasJournal = 'No log yet.' dejaApplique = '{0} settings already applied on this PC (bagarre-avant.json). Restore puts them back.' ouverte = 'Window open. If you do not see it, check the taskbar: it may be behind this terminal.' filtrer = 'Find a line'; coches = 'checked' detection = 'Detecting what is already in place on this PC...' detectionFin = '{0} settings already in place, unchecked and marked "already done". The rest is to do.' vieuxTitre = 'Your Windows install is {0} old.' vieuxTexte = 'Not that I doubt my script, but you never know. Always protect yourself first.' vieuxRestauration = 'Create a restore point'; vieuxSauvegarde = 'Back up my files'; vieuxContinuer = 'Continue anyway' an = 'year', 'years'; mois = 'month', 'months'; jour = 'day', 'days'; et = 'and' } } $Bagarre.L = $UI[$Bagarre.Langue] # Titre et explications d'un item dans la langue courante function Item-Titre($it) { if ($Bagarre.Langue -eq 'en' -and $TraductionsEn[$it.Id]) { $TraductionsEn[$it.Id].Titre } else { $it.Titre } } function Item-Pourquoi($it) { if ($Bagarre.Langue -eq 'en' -and $TraductionsEn[$it.Id]) { $TraductionsEn[$it.Id].Pourquoi } else { $it.Pourquoi } } function Item-Attention($it) { if ($Bagarre.Langue -eq 'en' -and $TraductionsEn[$it.Id]) { $TraductionsEn[$it.Id].Attention } else { $it.Attention } } # Âge de l'installation en mots : "2 ans et 3 mois", "3 mois et 12 jours", "12 jours" function Age-Texte($jours) { $L = $Bagarre.L $annees = [math]::Floor($jours / 365); $reste = $jours % 365; $m = [math]::Floor($reste / 30); $j = $reste % 30 $mot = { param($n, $f) if ($n -eq 1) { "$n $($f[0])" } else { "$n $($f[1])" } } if ($annees -gt 0) { $t = & $mot $annees $L.an; if ($m -gt 0) { $t += " $($L.et) " + (& $mot $m $L.mois) }; return $t } if ($m -gt 0) { $t = & $mot $m $L.mois; if ($j -gt 0) { $t += " $($L.et) " + (& $mot $j $L.jour) }; return $t } & $mot $j $L.jour } # --------------------------------------------------------------------------- # Les boutons : libellé et bulle d'aide dans les deux langues, logo de l'outil lancé, ce qu'ils font. # Un bouton est créé une fois (Bouton-Obtenir) et posé là où le texte de la page l'appelle par "@Id". # --------------------------------------------------------------------------- # Carte AMD dédiée : l'étape 4 devient la page AMD (textes/amd.txt), le rail et la carte d'accueil suivent. # Le nom interne de la page reste Nvidia. if ($EstAmd) { $UI.fr.nav[4] = 'AMD'; $UI.fr.resume[4] = 'pilote AMD, Adrenalin réglé'; $UI.fr.titres.Nvidia = 'Le pilote AMD et Adrenalin' $UI.en.nav[4] = 'AMD'; $UI.en.resume[4] = 'AMD driver, Adrenalin settings'; $UI.en.titres.Nvidia = 'The AMD driver and Adrenalin' } $Boutons = @{ BtnRestaurerAccueil = @{ T = @{ fr = 'Tout remettre comme avant'; en = 'Restore everything' }; Tip = @{ fr = 'Remet chaque réglage du script à cocher à sa valeur d''avant. Le DNS aussi.'; en = 'Puts every setting of the checkbox script back to its previous value. DNS too.' }; Action = { Restaurer-Demander } } BtnJournalAccueil = @{ T = @{ fr = 'Ouvrir le journal (bagarre.log)'; en = 'Open the log (bagarre.log)' }; Tip = @{ fr = 'Le détail de tout ce qui a été modifié sur ce PC.'; en = 'The detail of everything changed on this PC.' }; Action = { Journal-Ouvrir } } BtnCommande = @{ T = @{ fr = 'Copier la commande de lancement'; en = 'Copy the launch command' }; Tip = @{ fr = 'La ligne irm ... | iex dans le presse-papiers.'; en = 'The irm ... | iex line to the clipboard.' }; Action = { [Windows.Clipboard]::SetText("irm $Depot | iex"); Log $Bagarre.L.commandeCopiee } } BtnFsutil = @{ Logo = 'microsoft'; T = @{ fr = 'Lancer fsutil 8dot3name set 1'; en = 'Run fsutil 8dot3name set 1' }; Tip = @{ fr = 'Coupe la génération des noms courts PROGRA~1 sur les disques neufs, dans la console qui accompagne la fenêtre. Juste après le premier bureau, avant d''installer quoi que ce soit.'; en = 'Stops generating PROGRA~1 short names on new disks, in the console next to the window. Right after the first desktop, before installing anything.' }; Action = { Console-Lancer 'fsutil 8dot3name set 1' 'fsutil 8dot3name set 1; fsutil 8dot3name query' -Ici } } BtnWindowsUpdate = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir Windows Update'; en = 'Open Windows Update' }; Tip = @{ fr = 'Tu cliques jusqu''à ce qu''il n''y ait plus rien, redémarre entre chaque série.'; en = 'Click until nothing is left, reboot between each batch.' }; Action = { Ouvrir 'ms-settings:windowsupdate' } } BtnPeripheriques = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir le Gestionnaire de périphériques'; en = 'Open Device Manager' }; Tip = @{ fr = 'Un point d''exclamation jaune = un pilote qui manque.'; en = 'A yellow exclamation mark = a missing driver.' }; Action = { Ouvrir 'devmgmt.msc' } } BtnSnappy = @{ Logo = 'snappy'; T = @{ fr = 'Installer Snappy Driver Installer'; en = 'Install Snappy Driver Installer' }; Tip = @{ fr = 'Installe le zip officiel (celui que winget connaît) dans Program Files, pose un raccourci sur le Bureau et lance SDIO. Dernier recours pour un pilote introuvable. Ne coche que ce qui manque.'; en = 'Installs the official zip (the one winget knows) in Program Files, puts a shortcut on the Desktop and starts SDIO. Last resort for a missing driver. Only tick what is missing.' }; Action = { Snappy-Installer } } BtnDebloat = @{ Logo = 'raphire'; T = @{ fr = 'Lancer Win11Debloat'; en = 'Run Win11Debloat' }; Tip = @{ fr = 'Retire les applis sponsorisées, Copilot, les pubs, la télémétrie. Demande avant chaque groupe. Mode par défaut.'; en = 'Removes sponsored apps, Copilot, ads, telemetry. Asks before each group. Default mode.' }; Action = { Console-Lancer 'Win11Debloat' '& ([scriptblock]::Create((irm "https://debloat.raphi.re/")))' -Fermer } } BtnWinUtil = @{ Logo = 'christitus'; T = @{ fr = 'Lancer WinUtil (Chris Titus)'; en = 'Run WinUtil (Chris Titus)' }; Tip = @{ fr = 'Onglet Install pour tes programmes, onglet Tweaks preset Standard seulement.'; en = 'Install tab for your programs, Tweaks tab with the Standard preset only.' }; Action = { Console-Lancer 'WinUtil (Chris Titus)' 'irm https://christitus.com/win | iex' -Fermer } } BtnDirectX = @{ Logo = 'microsoft'; T = @{ fr = 'Installer DirectX 9'; en = 'Install DirectX 9' }; Tip = @{ fr = 'Installe via winget les vieilles librairies DirectX 9 que les anciens jeux réclament.'; en = 'Installs through winget the old DirectX 9 libraries older games ask for.' }; Action = { Winget-Installer 'DirectX' 'Microsoft.DirectX' } } BtnVcredist = @{ Logo = 'microsoft'; T = @{ fr = 'Installer Visual C++ 2005 à 2022'; en = 'Install Visual C++ 2005 to 2022' }; Tip = @{ fr = 'Installe via winget. Sans elles un jeu plante avec "VCRUNTIME140.dll introuvable".'; en = 'Installs through winget. Without them a game crashes with "VCRUNTIME140.dll not found".' }; Action = { $ids = foreach ($an in '2005', '2008', '2010', '2012', '2013', '2015+') { "Microsoft.VCRedist.$an.x86"; "Microsoft.VCRedist.$an.x64" }; Winget-Installer 'Visual C++ 2005-2022' $ids } } BtnSon = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir les périphériques de lecture'; en = 'Open playback devices' }; Tip = @{ fr = 'La fenêtre Son de Windows : ton haut-parleur > Propriétés > Améliorations et Avancé.'; en = 'The Windows Sound window: your speaker > Properties > Enhancements and Advanced.' }; Action = { Start-Process control.exe -ArgumentList 'mmsys.cpl' | Out-Null } } BtnAppliquer = @{ Zone = 'Barre'; Principal = $true; T = @{ fr = 'Appliquer'; en = 'Apply' }; Tip = @{ fr = 'Applique les cases cochées, après confirmation. L état d''avant est sauvé.'; en = 'Applies the checked boxes, after confirmation. The previous state is saved.' }; Action = { Appliquer-Demander } } BtnDetecter = @{ Zone = 'Barre'; T = @{ fr = 'Re-détecter ce PC'; en = 'Re-detect this PC' }; Tip = @{ fr = 'Relit le PC : les réglages déjà en place sont décochés et marqués "déjà fait".'; en = 'Reads the PC again: settings already in place get unchecked and marked "already done".' }; Action = { Detecter-Tout } } BtnRestaurer = @{ Zone = 'Barre'; T = @{ fr = 'Tout remettre comme avant'; en = 'Restore everything' }; Tip = @{ fr = 'Remet chaque réglage à sa valeur d''avant, DNS compris.'; en = 'Puts every setting back to its previous value, DNS included.' }; Action = { Restaurer-Demander } } BtnJournal = @{ Zone = 'Volet'; T = @{ fr = 'Ouvrir le journal (bagarre.log)'; en = 'Open the log (bagarre.log)' }; Tip = @{ fr = 'Le détail de tout ce qui a été modifié, avec les valeurs d''avant.'; en = 'The detail of everything changed, with the previous values.' }; Action = { Journal-Ouvrir } } BtnNvclean = @{ Logo = 'techpowerup'; T = @{ fr = 'Installer NVCleanstall'; en = 'Install NVCleanstall' }; Tip = @{ fr = 'Installe via winget. Le pilote NVIDIA nu, sans NVIDIA App.'; en = 'Installs through winget. The bare NVIDIA driver, without the NVIDIA App.' }; Action = { Winget-Installer 'NVCleanstall' 'TechPowerUp.NVCleanstall' } } BtnPanneau = @{ Logo = 'nvidia'; T = @{ fr = 'Installer le Panneau de configuration NVIDIA'; en = 'Install the NVIDIA Control Panel' }; Tip = @{ fr = 'Le Panneau OG, depuis le Store. À refaire après chaque installation propre du pilote.'; en = 'The OG Control Panel, from the Store. Redo it after every clean driver install.' }; Action = { Winget-Installer 'NVIDIA Control Panel' '9NF8H0H7WMLT' 'msstore' } } BtnAfterburner = @{ Logo = 'msi'; T = @{ fr = 'Installer MSI Afterburner + RivaTuner'; en = 'Install MSI Afterburner + RivaTuner' }; Tip = @{ fr = 'Installe via winget. Pour lire le temps d''image et poser un cap de FPS, pas pour overclocker.'; en = 'Installs through winget. To read frame times and set an FPS cap, not to overclock.' }; Action = { Winget-Installer 'MSI Afterburner + RivaTuner' 'Guru3D.Afterburner', 'Guru3D.RTSS' } } BtnImgNvclean = @{ T = @{ fr = 'Voir la capture : quoi cocher'; en = 'See the screenshot: what to tick' }; Tip = @{ fr = 'Les cases à cocher dans NVCleanstall. La ligne MPO reste au script à cocher.'; en = 'The boxes to tick in NVCleanstall. The MPO line stays with the checkbox script.' }; Action = { Image-Ouvrir 'nvcleanstall.png' } } BtnThreadPilot = @{ Logo = 'threadpilot'; T = @{ fr = 'Installer ThreadPilot'; en = 'Install ThreadPilot' }; Tip = @{ fr = 'Installe via winget. Open source, gratuit. Windows 11 seulement.'; en = 'Installs through winget. Open source, free. Windows 11 only.' }; Action = { Winget-Installer 'ThreadPilot' 'PrimeBuild.ThreadPilot' } } BtnLasso = @{ Logo = 'bitsum'; T = @{ fr = 'Installer Process Lasso'; en = 'Install Process Lasso' }; Tip = @{ fr = 'Installe via winget. Gratuit avec un rappel d''achat, version Pro payante.'; en = 'Installs through winget. Free with a purchase reminder, paid Pro edition.' }; Action = { Winget-Installer 'Process Lasso' 'BitSum.ProcessLasso' } } BtnIslc = @{ Logo = 'wagnardsoft'; T = @{ fr = 'Installer ISLC'; en = 'Install ISLC' }; Tip = @{ fr = 'Installe via winget et pose un raccourci sur le Bureau. 16 Go de RAM et des jeux récents seulement.'; en = 'Installs through winget and puts a shortcut on the Desktop. 16 GB of RAM and recent games only.' }; Action = { Islc-Installer } } BtnAutoGpu = @{ Logo = 'valleyofdoom'; T = @{ fr = 'Ouvrir le dépôt AutoGpuAffinity'; en = 'Open the AutoGpuAffinity repo' }; Tip = @{ fr = 'Ouvre le dépôt GitHub. Long (1 h), sur un PC déjà stable.'; en = 'Opens the GitHub repo. Long (1 h), on an already stable PC.' }; Action = { Ouvrir 'https://github.com/valleyofdoom/AutoGpuAffinity' } } BtnAmd = @{ T = @{ fr = 'Ouvrir la page pilotes AMD'; en = 'Open the AMD drivers page' }; Tip = @{ fr = 'Le site AMD, pilote seul.'; en = 'AMD site, driver only.' }; Action = { Ouvrir 'https://www.amd.com/en/support/download/drivers.html' } } BtnAutoruns = @{ Logo = 'microsoft'; T = @{ fr = 'Installer Autoruns'; en = 'Install Autoruns' }; Tip = @{ fr = 'Installe via winget. Tout ce qui se lance au démarrage. Décoche, ne supprime pas.'; en = 'Installs through winget. Everything that starts with Windows. Untick, do not delete.' }; Action = { Winget-Installer 'Autoruns' 'Microsoft.Sysinternals.Autoruns' } } BtnCleanmgr = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir le Nettoyage de disque'; en = 'Open Disk Cleanup' }; Tip = @{ fr = 'cleanmgr, puis Nettoyer les fichiers système : anciennes mises à jour, corbeille.'; en = 'cleanmgr, then Clean up system files: old updates, recycle bin.' }; Action = { Start-Process cleanmgr | Out-Null; Log 'console cleanmgr' } } BtnDismNettoyer = @{ Logo = 'microsoft'; T = @{ fr = 'Nettoyer les vieilles mises à jour (DISM)'; en = 'Clean old updates (DISM)' }; Tip = @{ fr = 'Dism /StartComponentCleanup dans la console qui accompagne la fenêtre. Jamais /ResetBase : tu perdrais la désinstallation des mises à jour.'; en = 'Dism /StartComponentCleanup in the console next to the window. Never /ResetBase: you would lose update uninstall.' }; Action = { Console-Lancer 'DISM StartComponentCleanup' 'Dism /Online /Cleanup-Image /StartComponentCleanup' -Ici } } BtnStockage = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir l''Assistant de stockage'; en = 'Open Storage Sense' }; Tip = @{ fr = 'Paramètres > Système > Stockage > Assistant de stockage.'; en = 'Settings > System > Storage > Storage Sense.' }; Action = { Ouvrir 'ms-settings:storagesense' } } BtnCrystal = @{ Logo = 'crystaldiskinfo'; T = @{ fr = 'Installer CrystalDiskInfo'; en = 'Install CrystalDiskInfo' }; Tip = @{ fr = 'Installe via winget. Santé et température des disques.'; en = 'Installs through winget. Disk health and temperature.' }; Action = { Winget-Installer 'CrystalDiskInfo' 'CrystalDewWorld.CrystalDiskInfo' } } BtnReveil = @{ Logo = 'microsoft'; T = @{ fr = 'Voir ce qui réveille le PC'; en = 'See what wakes the PC' }; Tip = @{ fr = 'powercfg /lastwake, /waketimers, /requests dans la console qui accompagne la fenêtre.'; en = 'powercfg /lastwake, /waketimers, /requests in the console next to the window.' }; Action = { Console-Lancer 'powercfg' 'powercfg /lastwake; Write-Host ""; powercfg /waketimers; Write-Host ""; powercfg /requests' -Ici } } BtnEvenements = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir l''Observateur d''événements'; en = 'Open Event Viewer' }; Tip = @{ fr = 'Journaux Windows > Système, source WHEA-Logger.'; en = 'Windows Logs > System, source WHEA-Logger.' }; Action = { Ouvrir 'eventvwr.msc' } } BtnWlan = @{ Logo = 'microsoft'; T = @{ fr = 'Générer le rapport Wi-Fi'; en = 'Generate the Wi-Fi report' }; Tip = @{ fr = 'netsh wlan show wlanreport dans la console qui accompagne la fenêtre, puis ouvre le rapport HTML.'; en = 'netsh wlan show wlanreport in the console next to the window, then opens the HTML report.' }; Action = { Console-Lancer 'wlanreport' 'netsh wlan show wlanreport; Start-Process "$env:ProgramData\Microsoft\Windows\WlanReport\wlan-report-latest.html"' -Ici } } BtnDefenderEnregistrer = @{ Logo = 'microsoft'; T = @{ fr = 'Enregistrer Defender pendant que tu joues'; en = 'Record Defender while you play' }; Tip = @{ fr = 'New-MpPerformanceRecording : joue dix minutes, puis Entrée dans la console. Le rapport des fichiers et dossiers les plus scannés s''affiche à la suite.'; en = 'New-MpPerformanceRecording: play ten minutes, then press Enter in the console. The report of the most scanned files and folders follows.' }; Action = { Console-Lancer 'Defender' 'New-MpPerformanceRecording -RecordTo C:\defender.etl; Get-MpPerformanceReport -Path C:\defender.etl -TopFiles 10 -TopPaths 10' } } BtnDefenderExclusions = @{ Logo = 'microsoft'; T = @{ fr = 'Ouvrir les exclusions Defender'; en = 'Open Defender exclusions' }; Tip = @{ fr = 'Sécurité Windows > Protection contre les virus > Paramètres > Exclusions.'; en = 'Windows Security > Virus protection > Settings > Exclusions.' }; Action = { Ouvrir 'windowsdefender://threatsettings' } } BtnDnsTester = @{ Principal = $true; T = @{ fr = 'Tester les DNS'; en = 'Test the DNS servers' }; Tip = @{ fr = 'Huit résolveurs, une minute au plus. Ne change rien.'; en = 'Eight resolvers, one minute at most. Changes nothing.' }; Action = { Dns-Tester } } BtnDnsAppliquer = @{ T = @{ fr = 'Utiliser les DNS choisis'; en = 'Use the chosen DNS' }; Tip = @{ fr = 'Principal et secours sur la carte testée, avec les deux cases. Tout remettre rend ce qu''il y avait avant, chiffrement et IPv6 compris.'; en = 'Primary and fallback on the tested card, with the two boxes. Restore puts back what was there before, encryption and IPv6 included.' }; Action = { $p = $Bagarre.DnsChoix if ($p -lt 0) { Log $Bagarre.L.dnsSelection; return } $s = if ($Bagarre.DnsSecours -ge 0) { $Bagarre.DnsResultats[$Bagarre.DnsSecours] } else { $Bagarre.DnsResultats[$p] } Dns-Appliquer $Bagarre.DnsAdapt $Bagarre.DnsResultats[$p] $s ([bool]$Ctl.DnsDoh.IsChecked) ([bool]$Ctl.DnsIpv6.IsChecked) } } BtnCollecter = @{ T = @{ fr = 'Collecter le rapport (30 s)'; en = 'Collect the report (30 s)' }; Tip = @{ fr = 'Ne modifie rien. Écrit rapport-pc.txt et AUDIT.txt dans bagarre-audit sur le Bureau, copie le prompt et ouvre le dossier.'; en = 'Changes nothing. Writes rapport-pc.txt and AUDIT.txt into bagarre-audit on the Desktop, copies the prompt and opens the folder.' }; Action = { Audit-Collecter } } BtnPrompt = @{ T = @{ fr = "Copier le prompt d'audit"; en = 'Copy the audit prompt' }; Tip = @{ fr = 'Dans le presse-papiers, à coller dans ton IA.'; en = 'To the clipboard, paste it into your AI.' }; Action = { [Windows.Clipboard]::SetText((Audit-Prompt)); Log $Bagarre.L.promptCopie } } BtnDossierAudit = @{ T = @{ fr = 'Ouvrir le dossier du rapport'; en = 'Open the report folder' }; Tip = @{ fr = 'bagarre-audit sur le Bureau.'; en = 'bagarre-audit on the Desktop.' }; Action = { if (Test-Path $DossierAudit) { Ouvrir $DossierAudit } else { Log $Bagarre.L.pasRapport } } } BtnVoileRestauration = @{ Logo = 'microsoft'; Principal = $true; T = @{ fr = 'Créer un point de restauration'; en = 'Create a restore point' }; Tip = @{ fr = 'Checkpoint-Computer dans la console qui accompagne la fenêtre. Windows n''en crée qu''un par 24 h.'; en = 'Checkpoint-Computer in the console next to the window. Windows creates only one per 24 h.' }; Action = { Console-Lancer 'Point de restauration' "Enable-ComputerRestore -Drive '$($env:SystemDrive)\'; Checkpoint-Computer -Description 'avant bagarre' -RestorePointType MODIFY_SETTINGS; Get-ComputerRestorePoint | Select-Object -Last 3 | Format-Table -AutoSize" -Ici } } BtnVoileSauvegarde = @{ Logo = 'microsoft'; T = @{ fr = 'Sauvegarder mes fichiers'; en = 'Back up my files' }; Tip = @{ fr = 'Paramètres > Sauvegarde Windows.'; en = 'Settings > Windows Backup.' }; Action = { Ouvrir 'ms-settings:backup' } } BtnVoileContinuer = @{ T = @{ fr = 'Continuer quand même'; en = 'Continue anyway' }; Tip = @{ fr = 'Ferme cet avertissement.'; en = 'Closes this warning.' }; Action = { $Ctl.Voile.Visibility = 'Collapsed' } } } # Snappy : winget refuse le paquet en admin (le hash du zip ne correspond plus au manifeste), donc on prend l'URL du zip # que winget connaît et on l'installe nous-mêmes dans Program Files, avec un raccourci. SDIO cherche ses langues dans # tools\SDIO\langs relatif au dossier courant : lancé sans -WorkingDirectory il ne les trouve pas et reste en anglais. # Avec, il prend la langue du compte (GetUserDefaultLCID). function Snappy-Installer { $fr = $Bagarre.Langue -eq 'fr' $m = @{ cherche = if ($fr) { 'Je demande à winget où est le zip de Snappy.' } else { 'Asking winget where the Snappy zip is.' } pasUrl = if ($fr) { "Pas trouvé l'URL du zip, j'ouvre la page de téléchargement à la place." } else { 'Could not find the zip URL, opening the download page instead.' } telecharge = if ($fr) { 'Téléchargement de' } else { 'Downloading' } installe = if ($fr) { 'Installé dans' } else { 'Installed in' } lance = if ($fr) { 'Je lance' } else { 'Starting' } pasExe = if ($fr) { "Pas d'exe x64 trouvé dans le zip, j'ouvre le dossier." } else { 'No x64 exe found in the zip, opening the folder.' } } foreach ($k in @($m.Keys)) { $m[$k] = Echapper $m[$k] } $cmd = @" $RaccourciCode `$ProgressPreference = 'SilentlyContinue' Write-Host '$($m.cherche)' `$fiche = winget show --id GlennDelahoy.SnappyDriverInstallerOrigin -e --accept-source-agreements | Out-String `$global:LASTEXITCODE = 0 `$url = [regex]::Match(`$fiche, 'https?://\S+\.zip').Value if (-not `$url) { Write-Host '$($m.pasUrl)' -ForegroundColor Yellow Start-Process 'https://www.glenn.delahoy.com/snappy-driver-installer-origin/' } else { `$zip = Join-Path `$env:TEMP 'sdio.zip' `$dest = Join-Path `$env:ProgramFiles 'Snappy Driver Installer Origin' Write-Host '$($m.telecharge)' `$url Invoke-WebRequest -Uri `$url -OutFile `$zip -UseBasicParsing -ErrorAction Stop Expand-Archive -Path `$zip -DestinationPath `$dest -Force -ErrorAction Stop Remove-Item `$zip -ErrorAction SilentlyContinue Write-Host '$($m.installe)' `$dest `$exe = Get-ChildItem -Path `$dest -Filter 'SDIO_x64_*.exe' | Sort-Object LastWriteTime -Descending | Select-Object -First 1 if (`$exe) { Raccourci 'Snappy Driver Installer Origin' `$exe.FullName Write-Host '$($m.lance)' `$exe.Name Start-Process -FilePath `$exe.FullName -WorkingDirectory `$dest } else { Write-Host '$($m.pasExe)' -ForegroundColor Yellow; Start-Process `$dest; `$Echec = `$true } } "@ Console-Lancer 'Snappy Driver Installer Origin' $cmd -Fermer } # ISLC : winget extrait l'archive dans Program Files (x86)\Wagnardsoft\ISLC\ISLC vX.Y sans poser de raccourci. # On en pose un vers l'exe le plus récent (une mise à jour ajoute un dossier de version à côté de l'ancien). function Islc-Installer { $pasExe = Echapper $(if ($Bagarre.Langue -eq 'fr') { "ISLC est installé mais je ne trouve pas son exe, pas de raccourci." } else { 'ISLC is installed but its exe was not found, no shortcut.' }) $cmd = @" $RaccourciCode winget install --id 'Wagnardsoft.ISLC' -e --accept-package-agreements --accept-source-agreements if (`$LASTEXITCODE -and `$LASTEXITCODE -ne -1978335189) { `$Echec = `$true } `$global:LASTEXITCODE = 0 `$exe = Get-ChildItem -Path "`${env:ProgramFiles(x86)}\Wagnardsoft", "`$env:ProgramFiles\Wagnardsoft" -Recurse -Filter '*ISLC.exe' -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1 if (`$exe) { Raccourci 'ISLC' `$exe.FullName } elseif (-not `$Echec) { Write-Host '$pasExe' -ForegroundColor Yellow; `$Echec = `$true } "@ Console-Lancer 'ISLC' $cmd -Fermer } # --------------------------------------------------------------------------- # La fenêtre : barre de titre maison (WindowChrome garde le déplacement, le redimensionnement, l'aimantation), # rail des étapes à gauche, la page au centre. Tout tourne sur le thread de la fenêtre : # Log, Dns-Mesurer, Collecter-Rapport et Appliquer-Items appellent Rafraichir pour qu'elle reste vivante. # --------------------------------------------------------------------------- Add-Type -AssemblyName PresentationFramework, PresentationCore, WindowsBase $Xaml = @'