Maintenir et gérer l’espace de stockage sur un système Windows avec PowerShell, CMD et les outils intégrés Windows.
📊 Vue d’ensemble du stockage
📋 Espace disque par lecteur
Get-WmiObject -Class Win32_LogicalDisk | Select-Object DeviceID, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}}
wmic logicaldisk get size,freespace,caption
💽 Vue moderne de l’espace disque
Get-Volume | Format-Table DriveLetter, FileSystemLabel, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="Free(GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}
💿 Informations détaillées des disques
Get-Disk | Format-Table Number, FriendlyName, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, HealthStatus
diskpart
list disk
📂 Analyse des répertoires
📦 Taille d’un répertoire (PowerShell)
(Get-ChildItem -Path "C:\Windows" -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB
📊 Taille de tous les dossiers du répertoire courant
Get-ChildItem -Directory | ForEach-Object { $size = (Get-ChildItem -Path $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB; "$($_.Name): $([math]::Round($size,2)) MB" }
🧱 Répertoires par taille décroissante
Get-ChildItem -Directory | ForEach-Object {
$size = (Get-ChildItem -Path $_.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB
[PSCustomObject]@{Name=$_.Name; Size=$size}
} | Sort-Object Size -Descending
📁 Contenu du répertoire avec tailles
dir /s
🏆 Identification des gros fichiers
🔍 Top 10 des plus gros fichiers
Get-ChildItem -Path "C:\" -Recurse -File -ErrorAction SilentlyContinue | Sort-Object Length -Descending | Select-Object -First 10 FullName, @{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}}
🐋 Fichiers volumineux (+100MB)
Get-ChildItem -Path "C:\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object {$_.Length -gt 100MB} | Select-Object FullName, @{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}}
🗂️ Plus gros fichiers par extension
Get-ChildItem -Path "C:\" -Recurse -File -ErrorAction SilentlyContinue | Group-Object Extension | Sort-Object @{Expression={($_.Group | Measure-Object Length -Sum).Sum}} -Descending | Select-Object -First 10
📁 Plus gros répertoires
Get-ChildItem -Path "C:\" -Directory | ForEach-Object {
$size = (Get-ChildItem -Path $_.FullName -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{Path=$_.FullName; Size=$size}
} | Sort-Object Size -Descending | Select-Object -First 10
🧹 Nettoyage et libération d’espace
🗑️ Nettoyage de disque Windows
cleanmgr /sagerun:1
🗑️ Vider les corbeilles
Clear-RecycleBin -Force
📜 Nettoyer dossiers temporaires
Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
🧹 Nettoyer fichiers anciens (>30 jours)
Get-ChildItem -Path "C:\Logs" -Recurse -File | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force
💿 Nettoyer les points de restauration
vssadmin delete shadows /for=c: /oldest
🚨 Surveillance en temps réel
📊 Surveillance continue de l’espace
while ($true) {
Clear-Host
Get-Volume | Format-Table DriveLetter, FileSystemLabel, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="Free(GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}
Start-Sleep -Seconds 10
}
🔄 Surveillance des gros répertoires
$folders = @("C:\Windows\Logs", "C:\ProgramData", "C:\Users")
while ($true) {
Clear-Host
foreach ($folder in $folders) {
$size = (Get-ChildItem -Path $folder -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
Write-Host "$folder : $([math]::Round($size,2)) GB"
}
Start-Sleep -Seconds 30
}
📋 Gestion avancée des logs
📝 Logs Événements Windows
Gestion des logs système Windows pour purger et limiter l’espace utilisé
Commandes de nettoyage
# Vérifier la taille des logs d'événements
Get-WinEvent -ListLog * | Where-Object {$_.RecordCount -gt 0} | Select-Object LogName, @{Name="Size(MB)";Expression={[math]::Round($_.FileSize/1MB,2)}}, RecordCount | Sort-Object "Size(MB)" -Descending
# Purger un log spécifique
Clear-EventLog -LogName "Application"
Clear-EventLog -LogName "System"
Clear-EventLog -LogName "Security"
# Purger tous les logs (attention !)
Get-EventLog -List | ForEach-Object {Clear-EventLog $_.Log}
# Sauvegarder avant purge
Get-EventLog -LogName Application | Export-Csv -Path "C:\Backup\Application.csv"
Configuration via stratégies de groupe
# Ouvrir l'éditeur de stratégies locales
gpedit.msc
# Chemin : Configuration ordinateur > Modèles d'administration > Composants Windows > Observateur d'événements
# Paramètres : Taille maximum des fichiers journaux
🔄 IIS Logs (si applicable)
Rotation automatique des logs IIS pour éviter qu’ils grossissent indéfiniment
# Localiser les logs IIS
Get-ChildItem -Path "C:\inetpub\logs\LogFiles" -Recurse
# Supprimer les logs IIS anciens (>30 jours)
Get-ChildItem -Path "C:\inetpub\logs\LogFiles" -Recurse -File | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force
# Configurer la rotation automatique via IIS Manager
# IIS Manager > Sites > Site > Logging > Format : W3C > Advanced > Log File Rollover
🔍 Windows Update Logs
Nettoyage des logs de mise à jour Windows
# Nettoyer les fichiers de mise à jour
Remove-Item -Path "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force -ErrorAction SilentlyContinue
# Nettoyer le cache Windows Update
Stop-Service -Name wuauserv
Stop-Service -Name cryptSvc
Stop-Service -Name bits
Stop-Service -Name msiserver
Remove-Item -Path "C:\Windows\SoftwareDistribution" -Recurse -Force -ErrorAction SilentlyContinue
Start-Service -Name wuauserv
Start-Service -Name cryptSvc
Start-Service -Name bits
Start-Service -Name msiserver
🧹 Nettoyage manuel fichiers logs
Commandes pour purger manuellement les fichiers logs et récupérer de l’espace
# Supprimer les fichiers .log anciens
Get-ChildItem -Path "C:\Windows\Logs" -Recurse -File -Filter "*.log" | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force
# Supprimer les fichiers de dump
Remove-Item -Path "C:\Windows\Minidump\*" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "C:\Windows\memory.dmp" -Force -ErrorAction SilentlyContinue
# Nettoyer les logs d'applications
$logPaths = @(
"C:\Windows\System32\LogFiles",
"C:\Windows\debug",
"C:\ProgramData\Microsoft\Windows\WER"
)
foreach ($path in $logPaths) {
if (Test-Path $path) {
Get-ChildItem -Path $path -Recurse -File | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item -Force -ErrorAction SilentlyContinue
}
}
🛠️ Outils graphiques intégrés
💾 Nettoyage de disque
# Ouvrir l'outil de nettoyage de disque
cleanmgr
# Nettoyage avancé avec options système
cleanmgr /sageset:1
cleanmgr /sagerun:1
📊 Analyseur d’utilisation du stockage
# Ouvrir l'analyseur de stockage Windows 10/11
ms-settings:storagesense