skip to content

Recherche

Espace Disque

Commandes et outils pour analyser, surveiller et gérer l'espace disque sous Windows !

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