Call-Informatique
Call-Informatique
Le média tech
Windows 11 : optimisation avancée et hardening complet
InformatiqueGuides11 min de lecture

Windows 11 : optimisation avancée et hardening complet

Télémétrie, services, registre, stratégies de groupe, scripts PowerShell : toutes les optimisations avancées pour un Windows 11 performant et discret.

Windows 11 : optimisation avancée et hardening complet

Ce guide s'adresse à ceux qui savent ouvrir un terminal sans trembler. On va désactiver la télémétrie via le registre et les GPO, couper les services gourmands, virer le bloatware en masse, et finir avec un script PowerShell qui fait tout d'un coup.

Toutes les commandes ont été testées sur Windows 11 24H2 (Build 26100). Elles fonctionnent aussi sur 23H2.

Prérequis

  • Windows 11 Pro ou Enterprise (certaines GPO nécessitent Pro minimum)
  • Compte administrateur local
  • PowerShell 5.1+ (intégré) ou Windows Terminal
  • Un point de restauration frais (on va modifier le registre)

Création du point de restauration en PowerShell :

powershell
## Activer la protection système si désactivée
Enable-ComputerRestore -Drive "C:\"

## Créer le point de restauration
Checkpoint-Computer -Description "Avant optimisation Windows 11" -RestorePointType MODIFY_SETTINGS

1. Désactivation complète de la télémétrie

Via le registre

Ouvrez PowerShell en administrateur et exécutez :

powershell
## Désactiver la télémétrie (niveau 0 = Security, minimum possible)
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Value 0 -PropertyType DWord -Force

## Désactiver l'envoi de données de diagnostic
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowDeviceNameInTelemetry" -Value 0 -PropertyType DWord -Force

## Désactiver le Customer Experience Improvement Program
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows" -Name "CEIPEnable" -Value 0 -PropertyType DWord -Force

## Désactiver Application Telemetry
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat" -Name "AITEnable" -Value 0 -PropertyType DWord -Force

## Désactiver les rapports d'erreurs Windows
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name "Disabled" -Value 1 -PropertyType DWord -Force

## Désactiver l'identifiant publicitaire
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" -Name "DisabledByGroupPolicy" -Value 1 -PropertyType DWord -Force

Via les stratégies de groupe (GPO)

Si vous êtes sur Windows 11 Pro ou Enterprise, gpedit.msc donne un contrôle plus fin :

terminal
Configuration ordinateur > Modèles d'administration > Composants Windows > Collecte des données et versions d'évaluation
  → Autoriser les données de diagnostic : Désactivé
  → Ne pas afficher les notifications de commentaires : Activé

Configuration ordinateur > Modèles d'administration > Composants Windows > Rapports d'erreurs Windows
  → Désactiver le rapport d'erreurs Windows : Activé

Configuration ordinateur > Modèles d'administration > Système > Gestion de la communication Internet
  → Désactiver la participation au programme d'amélioration de l'expérience utilisateur : Activé

Désactivation des services de télémétrie

powershell
## Service principal de télémétrie
Stop-Service -Name "DiagTrack" -Force
Set-Service -Name "DiagTrack" -StartupType Disabled

## Service de routage des messages push
Stop-Service -Name "dmwappushservice" -Force
Set-Service -Name "dmwappushservice" -StartupType Disabled

## Service de diagnostic
Stop-Service -Name "diagnosticshub.standardcollector.service" -Force -ErrorAction SilentlyContinue
Set-Service -Name "diagnosticshub.standardcollector.service" -StartupType Disabled -ErrorAction SilentlyContinue

Bloquer les serveurs de télémétrie via le fichier hosts

Approche complémentaire : empêcher les connexions sortantes vers les serveurs de collecte Microsoft.

powershell
$hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
$telemetryHosts = @(
    "0.0.0.0 vortex.data.microsoft.com",
    "0.0.0.0 vortex-win.data.microsoft.com",
    "0.0.0.0 telecommand.telemetry.microsoft.com",
    "0.0.0.0 oca.telemetry.microsoft.com",
    "0.0.0.0 sqm.telemetry.microsoft.com",
    "0.0.0.0 watson.telemetry.microsoft.com",
    "0.0.0.0 settings-sandbox.data.microsoft.com"
)

## Ajouter les entrées (sans doublon)
$currentHosts = Get-Content $hostsPath
foreach ($entry in $telemetryHosts) {
    if ($currentHosts -notcontains $entry) {
        Add-Content -Path $hostsPath -Value $entry
    }
}

## Vider le cache DNS
ipconfig /flushdns

⚠️ Cette méthode peut interférer avec certaines fonctionnalités de Windows Update. Surveillez vos mises à jour après application.

2. Suppression du bloatware en masse

Lister les applis préinstallées

powershell
## Voir toutes les applis installées pour l'utilisateur courant
Get-AppxPackage | Select-Object Name, PackageFullName | Sort-Object Name

## Voir celles installées pour tous les utilisateurs (provisionnées)
Get-AppxProvisionedPackage -Online | Select-Object DisplayName, PackageName

Script de suppression ciblée

powershell
## Liste des applis à supprimer (ajustez selon vos besoins)
$bloatware = @(
    "Clipchamp.Clipchamp",
    "Microsoft.BingNews",
    "Microsoft.BingWeather",
    "Microsoft.GamingApp",
    "Microsoft.GetHelp",
    "Microsoft.Getstarted",
    "Microsoft.MicrosoftOfficeHub",
    "Microsoft.MicrosoftSolitaireCollection",
    "Microsoft.People",
    "Microsoft.PowerAutomateDesktop",
    "Microsoft.Todos",
    "Microsoft.WindowsAlarms",
    "microsoft.windowscommunicationsapps",
    "Microsoft.WindowsFeedbackHub",
    "Microsoft.WindowsMaps",
    "Microsoft.WindowsSoundRecorder",
    "Microsoft.Xbox.TCUI",
    "Microsoft.XboxGameOverlay",
    "Microsoft.XboxGamingOverlay",
    "Microsoft.XboxIdentityProvider",
    "Microsoft.XboxSpeechToTextOverlay",
    "Microsoft.YourPhone",
    "Microsoft.ZuneMusic",
    "Microsoft.ZuneVideo",
    "MicrosoftCorporationII.MicrosoftFamily",
    "MicrosoftCorporationII.QuickAssist",
    "MicrosoftTeams"
)

foreach ($app in $bloatware) {
    # Supprimer pour l'utilisateur courant
    Get-AppxPackage -Name $app -ErrorAction SilentlyContinue | Remove-AppxPackage -ErrorAction SilentlyContinue
    # Supprimer le provisionnement (empêche la réinstallation pour les nouveaux utilisateurs)
    Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -eq $app } | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
    Write-Host "Traité : $app" -ForegroundColor Green
}

⚠️ Ne supprimez jamais ces packages : Microsoft.WindowsStore, Microsoft.WindowsTerminal, Microsoft.DesktopAppInstaller, Microsoft.VCLibs*, Microsoft.UI.Xaml*. Leur suppression casse des fonctionnalités système.

3. Désactivation des services inutiles

powershell
## Services à désactiver sur un poste de travail standard
$servicesToDisable = @(
    "DiagTrack",          # Télémétrie
    "dmwappushservice",   # Push WAP
    "MapsBroker",         # Cartes téléchargées
    "lfsvc",              # Géolocalisation
    "RemoteRegistry",     # Modification registre à distance
    "Fax",                # Service de fax
    "WMPNetworkSvc",      # Partage réseau Windows Media Player
    "RetailDemo",         # Mode démonstration
    "wisvc",              # Windows Insider
    "WerSvc"              # Rapports d'erreurs Windows
)

foreach ($svc in $servicesToDisable) {
    $service = Get-Service -Name $svc -ErrorAction SilentlyContinue
    if ($service) {
        Stop-Service -Name $svc -Force -ErrorAction SilentlyContinue
        Set-Service -Name $svc -StartupType Disabled
        Write-Host "Désactivé : $svc ($($service.DisplayName))" -ForegroundColor Yellow
    } else {
        Write-Host "Non trouvé : $svc" -ForegroundColor DarkGray
    }
}

Services à passer en Manuel (démarrage à la demande)

Certains services n'ont pas besoin de tourner en permanence mais restent utiles ponctuellement :

powershell
$servicesToManual = @(
    "SysMain",            # Superfetch : préchargement applis, lourd sur HDD
    "WSearch",            # Indexation Windows Search
    "TabletInputService", # Clavier tactile (inutile sur desktop)
    "Spooler"             # File d'impression (si pas d'imprimante)
)

foreach ($svc in $servicesToManual) {
    Set-Service -Name $svc -StartupType Manual -ErrorAction SilentlyContinue
    Write-Host "Passé en Manuel : $svc" -ForegroundColor Cyan
}

4. Optimisations du registre

powershell
## Désactiver Cortana
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowCortana" -Value 0 -PropertyType DWord -Force

## Désactiver les suggestions dans le menu Démarrer
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SystemPaneSuggestionsEnabled" -Value 0 -PropertyType DWord -Force
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Value 0 -PropertyType DWord -Force

## Désactiver les applications silencieusement installées
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SilentInstalledAppsEnabled" -Value 0 -PropertyType DWord -Force

## Désactiver les tips et suggestions Windows
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SoftLandingEnabled" -Value 0 -PropertyType DWord -Force

## Désactiver le suivi des lancements d'applications
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "Start_TrackProcs" -Value 0 -PropertyType DWord -Force

## Désactiver la collecte de données de saisie
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Input\TIPC" -Name "Enabled" -Value 0 -PropertyType DWord -Force

## Activer le dernier plan d'alimentation haute performance
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

## Réduire le délai de fermeture des applications au shutdown (de 5000ms à 2000ms)
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "WaitToKillAppTimeout" -Value "2000" -PropertyType String -Force
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control" -Name "WaitToKillServiceTimeout" -Value "2000" -PropertyType String -Force

5. Optimisation réseau

powershell
## Désactiver Nagle's Algorithm (réduit la latence réseau, utile pour le gaming)
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSMQ\Parameters" -Name "TCPNoDelay" -Value 1 -PropertyType DWord -Force

## Désactiver la limitation de bande passante réservée aux mises à jour
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Psched" -Name "NonBestEffortLimit" -Value 0 -PropertyType DWord -Force

## Désactiver l'optimisation de livraison P2P (Windows Update partagé entre PCs)
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization" -Name "DODownloadMode" -Value 0 -PropertyType DWord -Force

6. Nettoyage des tâches planifiées de télémétrie

powershell
## Lister les tâches de télémétrie Microsoft
Get-ScheduledTask -TaskPath "\Microsoft\Windows\*" | Where-Object {
    $_.TaskName -match "Consolidator|UsbCeip|DmClient|KernelCeipTask|Proxy|QueueReporting"
} | Format-Table TaskName, State, TaskPath

## Désactiver les tâches de télémétrie
$telemetryTasks = @(
    "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser",
    "\Microsoft\Windows\Application Experience\ProgramDataUpdater",
    "\Microsoft\Windows\Autochk\Proxy",
    "\Microsoft\Windows\Customer Experience Improvement Program\Consolidator",
    "\Microsoft\Windows\Customer Experience Improvement Program\UsbCeip",
    "\Microsoft\Windows\Customer Experience Improvement Program\KernelCeipTask",
    "\Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector",
    "\Microsoft\Windows\Feedback\Siuf\DmClient",
    "\Microsoft\Windows\Windows Error Reporting\QueueReporting"
)

foreach ($task in $telemetryTasks) {
    Disable-ScheduledTask -TaskName $task -ErrorAction SilentlyContinue
    Write-Host "Tâche désactivée : $task" -ForegroundColor Yellow
}

7. Script d'optimisation complet

Pour ceux qui veulent tout appliquer d'un coup, voici un script consolidé. Enregistrez-le en .ps1 et exécutez-le en administrateur.

powershell
## optimize-win11.ps1
## Script d'optimisation Windows 11 - Call-Informatique.fr
## Exécuter en tant qu'administrateur

#Requires -RunAsAdministrator

Write-Host "=== Optimisation Windows 11 ==" -ForegroundColor Cyan
Write-Host "Création du point de restauration..." -ForegroundColor White

Enable-ComputerRestore -Drive "C:\" -ErrorAction SilentlyContinue
Checkpoint-Computer -Description "Pre-optimisation-$(Get-Date -Format 'yyyyMMdd')" -RestorePointType MODIFY_SETTINGS -ErrorAction SilentlyContinue

## —- TELEMETRIE —-
Write-Host "`n[1/5] Désactivation de la télémétrie..." -ForegroundColor Green

$regPaths = @{
    "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" = @{ "AllowTelemetry" = 0; "AllowDeviceNameInTelemetry" = 0 }
    "HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows" = @{ "CEIPEnable" = 0 }
    "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat" = @{ "AITEnable" = 0 }
    "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" = @{ "Disabled" = 1 }
    "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" = @{ "DisabledByGroupPolicy" = 1 }
}

foreach ($path in $regPaths.Keys) {
    if (-not (Test-Path $path)) { New-Item -Path $path -Force | Out-Null }
    foreach ($name in $regPaths[$path].Keys) {
        New-ItemProperty -Path $path -Name $name -Value $regPaths[$path][$name] -PropertyType DWord -Force | Out-Null
    }
}

## —- SERVICES —-
Write-Host "[2/5] Désactivation des services inutiles..." -ForegroundColor Green

@("DiagTrack","dmwappushservice","MapsBroker","lfsvc","RemoteRegistry","Fax","RetailDemo","wisvc","WerSvc") | ForEach-Object {
    Stop-Service -Name $_ -Force -ErrorAction SilentlyContinue
    Set-Service -Name $_ -StartupType Disabled -ErrorAction SilentlyContinue
}

@("SysMain","WSearch") | ForEach-Object {
    Set-Service -Name $_ -StartupType Manual -ErrorAction SilentlyContinue
}

## —- BLOATWARE —-
Write-Host "[3/5] Suppression du bloatware..." -ForegroundColor Green

@(
    "Clipchamp.Clipchamp","Microsoft.BingNews","Microsoft.BingWeather",
    "Microsoft.GamingApp","Microsoft.GetHelp","Microsoft.Getstarted",
    "Microsoft.MicrosoftOfficeHub","Microsoft.MicrosoftSolitaireCollection",
    "Microsoft.People","Microsoft.PowerAutomateDesktop","Microsoft.Todos",
    "Microsoft.WindowsFeedbackHub","Microsoft.WindowsMaps",
    "Microsoft.Xbox.TCUI","Microsoft.XboxGameOverlay",
    "Microsoft.XboxGamingOverlay","Microsoft.XboxSpeechToTextOverlay",
    "Microsoft.YourPhone","Microsoft.ZuneMusic","Microsoft.ZuneVideo",
    "MicrosoftTeams"
) | ForEach-Object {
    Get-AppxPackage -Name $_ -ErrorAction SilentlyContinue | Remove-AppxPackage -ErrorAction SilentlyContinue
    Get-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -eq $_ } | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
}

## —- REGISTRE —-
Write-Host "[4/5] Optimisations registre..." -ForegroundColor Green

## Désactiver Cortana, pubs, suggestions
$userReg = @{
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" = @{
        "SystemPaneSuggestionsEnabled" = 0
        "SubscribedContent-338388Enabled" = 0
        "SilentInstalledAppsEnabled" = 0
        "SoftLandingEnabled" = 0
    }
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" = @{ "Start_TrackProcs" = 0 }
    "HKCU:\SOFTWARE\Microsoft\Input\TIPC" = @{ "Enabled" = 0 }
}

foreach ($path in $userReg.Keys) {
    if (-not (Test-Path $path)) { New-Item -Path $path -Force | Out-Null }
    foreach ($name in $userReg[$path].Keys) {
        New-ItemProperty -Path $path -Name $name -Value $userReg[$path][$name] -PropertyType DWord -Force | Out-Null
    }
}

## Réduire les délais de shutdown
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "WaitToKillAppTimeout" -Value "2000" -PropertyType String -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control" -Name "WaitToKillServiceTimeout" -Value "2000" -PropertyType String -Force | Out-Null

## Plan haute performance
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c 2>$null

## —- TACHES PLANIFIEES —-
Write-Host "[5/5] Désactivation des tâches de télémétrie..." -ForegroundColor Green

@(
    "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser",
    "\Microsoft\Windows\Customer Experience Improvement Program\Consolidator",
    "\Microsoft\Windows\Customer Experience Improvement Program\UsbCeip",
    "\Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector"
) | ForEach-Object {
    Disable-ScheduledTask -TaskName $_ -ErrorAction SilentlyContinue | Out-Null
}

Write-Host "`n=== Optimisation terminée ==" -ForegroundColor Cyan
Write-Host "Redémarrez votre PC pour appliquer tous les changements." -ForegroundColor White
Write-Host "En cas de problème, utilisez le point de restauration créé au début." -ForegroundColor Yellow

Dépannage

Windows Update ne fonctionne plus

Si vous avez modifié le fichier hosts (section télémétrie), certains domaines Microsoft bloqués peuvent interférer avec les mises à jour. Retirez les entrées du fichier hosts et relancez :

powershell
## Vider le cache DNS après modification du fichier hosts
ipconfig /flushdns

## Redémarrer le service Windows Update
Restart-Service wuauserv

Le Microsoft Store ne charge plus

Vérifiez que vous n'avez pas supprimé Microsoft.WindowsStore :

powershell
Get-AppxPackage *WindowsStore*

Si le package est absent, réinstallez-le :

powershell
Get-AppxPackage -AllUsers *WindowsStore* | ForEach-Object { Add-AppxPackage -Register "$($_.InstallLocation)\AppxManifest.xml" -DisableDevelopmentMode }

Un service désactivé cause un problème

Pour réactiver un service :

powershell
Set-Service -Name "NomDuService" -StartupType Automatic
Start-Service -Name "NomDuService"

Rollback complet

Utilisez le point de restauration :

  1. Redémarrez en mode sans échec (Maj + Redémarrer)
  2. Dépannage > Options avancées > Restauration du système
  3. Sélectionnez le point créé avant optimisation

Ou via PowerShell (nécessite un redémarrage) :

powershell
Get-ComputerRestorePoint | Format-Table SequenceNumber, Description, CreationTime

Aller plus loin

Pour les utilisateurs avancés qui veulent un outil graphique complet, le projet open source WinUtil de Chris Titus Tech offre une interface pour appliquer ces optimisations et bien d'autres. Exécution en une ligne :

powershell
irm christitus.com/win | iex

⚠️ Comme tout script tiers, lisez le code source avant exécution. Ce script modifie de nombreux paramètres système.

Sur le même sujet

À lire aussi

#tutoriel#guide-technique#windows 11#optimisation#télémétrie