💾 Espace disque multi-serveurs
Rapport espace disque sur une liste de serveurs Windows
powershellScript
Rapport espace disque multi-serveurs
Collecte l'espace disque sur plusieurs serveurs Windows et génère un rapport HTML/CSV.
Script
# espace-disque-serveurs.ps1 — Rapport disque multi-serveurs
param(
[string[]]$Servers = @($env:COMPUTERNAME),
[string]$ServersFile = "",
[int]$WarnPercent = 80,
[int]$CritPercent = 90,
[string]$ExportHtml = "C:\rapports\espace-disque.html",
[string]$ExportCsv = "",
[string[]]$ExcludeDrives = @("A", "B")
)
── Lecture liste serveurs ────────────────────────────────────
if ($ServersFile -and (Test-Path $ServersFile)) {
$Servers = Get-Content $ServersFile | Where-Object { $_ -match '\S' -and $_ -notmatch '^#' }
}
Write-Host "🖥️ Rapport espace disque — $(Get-Date -Format 'dd/MM/yyyy HH:mm')" -ForegroundColor Cyan
Write-Host " Serveurs : $($Servers.Count)"
── Collecte des données ──────────────────────────────────────
$AllDisks = foreach ($Server in $Servers) {
Write-Host " Interrogation : $Server..." -NoNewline
try {
$Disks = Get-WmiObject -Class Win32_LogicalDisk `
-ComputerName $Server `
-Filter "DriveType=3" `
-ErrorAction Stop
foreach ($Disk in $Disks) {
$Letter = $Disk.DeviceID.TrimEnd(":")
if ($Letter -in $ExcludeDrives) { continue }
$TotalGB = [math]::Round($Disk.Size / 1GB, 2)
$FreeGB = [math]::Round($Disk.FreeSpace / 1GB, 2)
$UsedGB = [math]::Round(($Disk.Size - $Disk.FreeSpace) / 1GB, 2)
$UsedPct = if ($TotalGB -gt 0) { [math]::Round(($UsedGB / $TotalGB) * 100, 1) } else { 0 }
[PSCustomObject]@{
Serveur = $Server
Lecteur = $Disk.DeviceID
Label = $Disk.VolumeName
TotalGB = $TotalGB
UtiliséGB = $UsedGB
LibreGB = $FreeGB
"Utilisé%" = $UsedPct
Statut = if ($UsedPct -ge $CritPercent) { "CRITIQUE" }
elseif ($UsedPct -ge $WarnPercent) { "ALERTE" }
else { "OK" }
}
}
Write-Host " ✓ ($($Disks.Count) lecteur(s))" -ForegroundColor Green
} catch {
Write-Host " ✗ Erreur : $_" -ForegroundColor Red
[PSCustomObject]@{
Serveur = $Server; Lecteur = "N/A"; Label = ""; TotalGB = 0
UtilisésGB = 0; LibreGB = 0; "Utilisé%" = 0; Statut = "ERREUR"
}
}
}
── Résumé console ────────────────────────────────────────────
$AllDisks | Format-Table -AutoSize Serveur, Lecteur, Label,
@{N="Total (Go)";E={$_.TotalGB}},
@{N="Libre (Go)";E={$_.LibreGB}},
@{N="Utilisé %";E={"$($_.'Utilisé%')%"}},
Statut
$Critiques = $AllDisks | Where-Object { $_.Statut -eq "CRITIQUE" }
$Alertes = $AllDisks | Where-Object { $_.Statut -eq "ALERTE" }
Write-Host "`n📊 $($AllDisks.Count) lecteurs — CRITIQUE: $($Critiques.Count) — ALERTE: $($Alertes.Count)"
── Export CSV ────────────────────────────────────────────────
if ($ExportCsv) {
$AllDisks | Export-Csv -Path $ExportCsv -NoTypeInformation -Encoding UTF8
Write-Host "📄 CSV : $ExportCsv" -ForegroundColor Green
}
── Export HTML ───────────────────────────────────────────────
if ($ExportHtml) {
$Date = Get-Date -Format "dd/MM/yyyy HH:mm"
$Rows = $AllDisks | ForEach-Object {
$pct = $_."Utilisé%"
$bg = if ($_.Statut -eq "CRITIQUE") { "#ffe0e0" }
elseif ($_.Statut -eq "ALERTE") { "#fff3cd" }
else { "#e8f5e9" }
$bar = if ($pct -ge $CritPercent) { "danger" } elseif ($pct -ge $WarnPercent) { "warning" } else { "success" }
@"
<tr style="background:$bg">
<td><b>$($_.Serveur)</b></td>
<td>$($_.Lecteur)</td><td>$($_.Label)</td>
<td style="text-align:right">$($_.TotalGB) Go</td>
<td style="text-align:right">$($_.LibreGB) Go</td>
<td>
<div style="background:#ddd;border-radius:4px;overflow:hidden;width:120px;display:inline-block">
<div style="width:${pct}%;background:$(if($bar -eq 'danger'){'#dc3545'}elseif($bar -eq 'warning'){'#ffc107'}else{'#28a745'});height:16px;color:white;font-size:11px;text-align:center;line-height:16px">${pct}%</div>
</div>
</td>
<td><b>$($_.Statut)</b></td>
</tr>
"@
}
$Html = @"
<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8">
<title>Espace Disque — $Date</title>
<style>body{font-family:Arial;margin:20px}table{border-collapse:collapse;width:100%}
th,td{border:1px solid #ddd;padding:8px}th{background:#2c3e50;color:white}
h1{color:#2c3e50}</style></head><body>
<h1>🖥️ Rapport Espace Disque</h1>
<p>Généré le $Date — $($Servers.Count) serveur(s) — $($AllDisks.Count) lecteur(s)</p>
<table><tr><th>Serveur</th><th>Lecteur</th><th>Label</th><th>Total</th>
<th>Libre</th><th>Utilisation</th><th>Statut</th></tr>
$($Rows -join "`n")
</table></body></html>
"@
$Html | Out-File -FilePath $ExportHtml -Encoding UTF8
Write-Host "🌐 HTML : $ExportHtml" -ForegroundColor Green
}
Utilisation
# Serveur local
.\espace-disque-serveurs.ps1
Liste de serveurs avec seuils personnalisés
.\espace-disque-serveurs.ps1 -Servers "SRV01","SRV02","SRV03" -WarnPercent 75 -CritPercent 85
Depuis un fichier (un serveur par ligne)
.\espace-disque-serveurs.ps1 -ServersFile "C:\conf\serveurs.txt" -ExportHtml "C:\rapports\disques.html"
🔧 Ouvrir tools.rdr-it.com — application complète →
Plus de 40 outils AdminSys gratuits · SSL · DNS · Docker · Nginx · SSH · Mermaid · et plus