Vous souhaitez aller au-delà des scripts prêts à l'emploi et comprendre comment ils fonctionnent ? Ce guide vous apprend à créer vos propres scripts PowerShell d'optimisation pour Windows 11, étape par étape. Des bases du langage jusqu'à la signature de vos scripts, vous deviendrez totalement autonome.
1. Les Bases de PowerShell pour Windows 11
Avant de modifier le système, maîtrisez les fondamentaux de PowerShell. Contrairement à l'invite de commandes classique, PowerShell manipule des objets .NET, ce qui le rend infiniment plus puissant pour l'administration système.
# Variables et types de données en PowerShell
$computerName = $env:COMPUTERNAME # String
$ramTotal = (Get-CimInstance Win32_PhysicalMemory |
Measure-Object -Property Capacity -Sum).Sum / 1GB # Nombre
$isLaptop = (Get-CimInstance Win32_Battery) -ne $null # Booléen
$services = @("DiagTrack", "SysMain", "MapsBroker") # Tableau
# Afficher les informations système
Write-Host "Machine : $computerName" -ForegroundColor Cyan
Write-Host "RAM : $ramTotal Go" -ForegroundColor Cyan
Write-Host "Laptop : $isLaptop" -ForegroundColor Cyan
Write-Host "Services à traiter : $($services.Count)" -ForegroundColor Cyan2. Manipuler le Registre Windows
Le registre Windows est le cœur de la configuration du système. La majorité des tweaks d'optimisation consistent à modifier des clés de registre. PowerShell offre un accès direct via les PSDrive HKLM: et HKCU: :
# Lire, créer et modifier des clés de registre
$regPath = "HKCU:\Software\MonOptimiseur"
# Créer la clé si elle n'existe pas
if (-not (Test-Path $regPath)) {
New-Item -Path $regPath -Force | Out-Null
}
# Écrire des valeurs
Set-ItemProperty -Path $regPath -Name "Version" -Value "1.0" -Type String
Set-ItemProperty -Path $regPath -Name "LastRun" -Value (Get-Date -Format "yyyy-MM-dd") -Type String
# Tweaks courants : désactiver les animations
$explorerPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
Set-ItemProperty -Path $explorerPath -Name "TaskbarAnimations" -Value 0
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "MenuShowDelay" -Value "0"
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop\WindowMetrics" -Name "MinAnimate" -Value "0"
Write-Host "✅ Registre modifié avec succès" -ForegroundColor Green3. Gérer les Services Windows
Désactiver les services inutiles est l'un des leviers d'optimisation les plus efficaces. Créez une fonction réutilisable qui vérifie l'état actuel du service avant de le modifier :
# Fonction réutilisable de gestion des services
function Set-ServiceOptimized {
param(
[Parameter(Mandatory)][string]$Name,
[ValidateSet("Disabled","Manual","Automatic")][string]$StartupType = "Disabled"
)
$svc = Get-Service -Name $Name -ErrorAction SilentlyContinue
if (-not $svc) {
Write-Host "⏭️ Service non trouvé : $Name" -ForegroundColor DarkGray
return
}
if ($svc.StartType -eq $StartupType) {
Write-Host "ℹ️ Déjà configuré : $Name ($StartupType)" -ForegroundColor Cyan
return
}
Stop-Service -Name $Name -Force -ErrorAction SilentlyContinue
Set-Service -Name $Name -StartupType $StartupType
Write-Host "✅ $Name → $StartupType" -ForegroundColor Green
}
# Utilisation
@("DiagTrack", "SysMain", "MapsBroker", "lfsvc", "Fax") |
ForEach-Object { Set-ServiceOptimized -Name $_ -StartupType Disabled }4. Gestion des Erreurs et Robustesse
Un script d'optimisation qui plante en plein milieu peut laisser le système dans un état incohérent. Utilisez systématiquement try/catch/finally pour garantir que chaque étape est protégée et que les erreurs sont journalisées :
Encapsulez les opérations critiques (modifications du registre, arrêt de services, suppression de fichiers) dans des blocs try. Dans le bloc catch, enregistrez l'erreur dans un fichier de log avec le timestamp, le nom de l'opération et le message d'exception. Le bloc finally sert à rétablir l'état si nécessaire.
Checkpoint-Computer -Description "Avant optimisation" -RestorePointType MODIFY_SETTINGS au début de votre script. Cela vous permettra de revenir en arrière en cas de problème.
5. Signer vos Scripts PowerShell
Par défaut, Windows 11 bloque l'exécution des scripts non signés. Plutôt que de baisser la politique d'exécution, apprenez à créer un certificat auto-signé et à signer vos scripts proprement :
# Créer un certificat de signature de code
$cert = New-SelfSignedCertificate -Type CodeSigningCert `
-Subject "CN=MonOptimiseur" -CertStoreLocation "Cert:\CurrentUser\My" `
-NotAfter (Get-Date).AddYears(3)
# Exporter le certificat dans le magasin de confiance
Export-Certificate -Cert $cert -FilePath "$HOME\MonOptimiseur.cer"
Import-Certificate -FilePath "$HOME\MonOptimiseur.cer" `
-CertStoreLocation "Cert:\CurrentUser\TrustedPublisher"
# Signer un script
$signingCert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
Where-Object { $_.Subject -like "*MonOptimiseur*" }
Set-AuthenticodeSignature -FilePath "C:\Scripts\optimisation.ps1" `
-Certificate $signingCert -TimestampServer "http://timestamp.digicert.com"
Write-Host "✅ Script signé avec succès" -ForegroundColor Green6. Créer des Fonctions Réutilisables
Structurez votre code en fonctions modulaires que vous pourrez importer dans n'importe quel script. Créez un fichier module .psm1 contenant vos fonctions de tweak registre, gestion de services et nettoyage. Importez-le ensuite avec Import-Module.
Les bonnes pratiques incluent : nommer vos fonctions avec le format Verbe-Nom (ex : Optimize-StartMenu, Disable-Telemetry), ajouter des commentaires d'aide avec <# .SYNOPSIS #>, et utiliser [CmdletBinding()] pour supporter -Verbose et -WhatIf.
-WhatIf dans vos fonctions pour simuler les modifications sans les appliquer. Ajoutez [CmdletBinding(SupportsShouldProcess)] à vos fonctions et testez avec Optimize-MonScript -WhatIf avant de lancer réellement.
7. Tester vos Scripts en Toute Sécurité
Ne testez jamais un script d'optimisation directement sur votre machine principale. Utilisez Windows Sandbox (activable dans les fonctionnalités Windows) ou une machine virtuelle Hyper-V pour valider vos modifications. Vous pouvez aussi utiliser Pester, le framework de test intégré à PowerShell, pour écrire des tests unitaires automatisés :
# Test Pester pour valider une fonction d'optimisation
Describe "Set-ServiceOptimized" {
It "Devrait désactiver un service existant" {
Mock Get-Service { [PSCustomObject]@{ Name = "TestSvc"; StartType = "Automatic" } }
Mock Stop-Service {}
Mock Set-Service {}
Set-ServiceOptimized -Name "TestSvc" -StartupType Disabled
Should -Invoke Set-Service -Times 1 -ParameterFilter {
$Name -eq "TestSvc" -and $StartupType -eq "Disabled"
}
}
It "Devrait ignorer un service inexistant" {
Mock Get-Service { $null }
{ Set-ServiceOptimized -Name "FauxService" } | Should -Not -Throw
}
}🛠️ 198+ Scripts Déjà Créés pour Vous
Vous préférez gagner du temps ? WindowsBooster propose plus de 198 scripts d'optimisation testés et validés, accessibles en un clic.
Lancer WindowsBoosterConclusion
Créer vos propres scripts d'optimisation PowerShell vous donne un contrôle total sur votre système Windows 11. En maîtrisant les variables, le registre, la gestion des services et la signature de scripts, vous pouvez construire des outils sur mesure et parfaitement adaptés à vos besoins. Pour aller plus loin, consultez nos guides sur l'automatisation de la maintenance et les tâches planifiées.