1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| # Script de suppression complète de Python
# A EXECUTER EN TANT QU'ADMINISTRATEUR
$ErrorActionPreference = "SilentlyContinue"
Write-Host "--- Démarrage du nettoyage de Python ---" -ForegroundColor Cyan
# 1. Suppression des versions Microsoft Store
Write-Host "1. Recherche et suppression des versions Microsoft Store..." -ForegroundColor Yellow
Get-AppxPackage -AllUsers *Python* | Remove-AppxPackage -AllUsers
Write-Host " Terminé." -ForegroundColor Green
# 2. Désinstallation via les méthodes MSI/EXE standard
Write-Host "2. Désinstallation des versions classiques (MSI/EXE)..." -ForegroundColor Yellow
# On cherche dans les clés de registre de désinstallation (32 et 64 bits)
$uninstallKeys = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
)
foreach ($key in $uninstallKeys) {
Get-ChildItem $key | ForEach-Object {
$props = Get-ItemProperty $_.PSPath
if ($props.DisplayName -like "*Python*" -and $props.DisplayName -notlike "*IronPython*") {
Write-Host " Désinstallation de : $($props.DisplayName)"
# Si c'est un MSI
if ($props.UninstallString -match "MsiExec.exe") {
$guid = $props.PSChildName
Start-Process "MsiExec.exe" -ArgumentList "/x $guid /quiet /norestart" -Wait
}
# Si c'est un EXE (pip uninstall ou autre installeur)
elseif ($props.UninstallString) {
# Tentative d'exécution silencieuse
$uninstallString = $props.UninstallString -replace '"', ""
Start-Process $uninstallString -ArgumentList "/quiet /uninstall" -Wait
}
}
}
}
Write-Host " Terminé." -ForegroundColor Green
# 3. Nettoyage des Variables d'Environnement (PATH)
Write-Host "3. Nettoyage du PATH (Système et Utilisateur)..." -ForegroundColor Yellow
function Clean-Path ($scope) {
$path = [Environment]::GetEnvironmentVariable("Path", $scope)
if ($path) {
$parts = $path -split ";"
# On garde tout ce qui NE contient PAS "Python"
$newParts = $parts | Where-Object { $_ -notlike "*Python*" -and $_ -notlike "*Scripts*" }
$newPath = $newParts -join ";"
[Environment]::SetEnvironmentVariable("Path", $newPath, $scope)
}
}
Clean-Path "Machine"
Clean-Path "User"
Write-Host " Terminé." -ForegroundColor Green
# 4. Suppression des dossiers résiduels (Fichiers)
Write-Host "4. Suppression des dossiers sur le disque..." -ForegroundColor Yellow
$folders = @(
"C:\Python*",
"$env:LOCALAPPDATA\Programs\Python",
"$env:APPDATA\Python",
"$env:ProgramFiles\Python*",
"$env:ProgramFiles(x86)\Python*"
)
foreach ($folder in $folders) {
if (Test-Path $folder) {
Write-Host " Suppression de : $folder"
Remove-Item $folder -Recurse -Force
}
}
Write-Host " Terminé." -ForegroundColor Green
# 5. Nettoyage des clés de Registre spécifiques
Write-Host "5. Nettoyage final du Registre..." -ForegroundColor Yellow
$regKeys = @(
"HKLM:\SOFTWARE\Python",
"HKCU:\SOFTWARE\Python",
"HKLM:\SOFTWARE\WOW6432Node\Python"
)
foreach ($regKey in $regKeys) {
if (Test-Path $regKey) {
Write-Host " Suppression de la clé : $regKey"
Remove-Item $regKey -Recurse -Force
}
}
Write-Host "--- Nettoyage terminé. Veuillez redémarrer votre ordinateur. ---" -ForegroundColor Cyan |