PowerShell: monitorare lo spazio disco e ricevere email di alert

Pubblicato il 09/05/2026 Windows

Avere un dashboard di monitoring per un singolo server è eccessivo. Uno script PowerShell schedulato che ti scrive una mail quando un disco si riempie è spesso sufficiente — soprattutto in piccole infrastrutture.

1. Lo script

Salva il seguente file come C:\Scripts\DiskMonitor.ps1:

# Parametri
$SogliaPerc   = 85
$Mittente     = "monitor@example.com"
$Destinatario = "admin@example.com"
$SmtpServer   = "smtp.example.com"
$SmtpPort     = 587
$SmtpUser     = "monitor@example.com"
$SmtpPass     = "PASSWORD_QUI"

$alerts = @()
Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    $used  = $_.Used
    $free  = $_.Free
    $total = $used + $free
    if ($total -eq 0) { return }
    $perc = [Math]::Round(($used / $total) * 100, 1)
    if ($perc -ge $SogliaPerc) {
        $alerts += "Disco $($_.Name): - usato $perc% ( $([Math]::Round($used/1GB,1)) GB / $([Math]::Round($total/1GB,1)) GB )"
    }
}

if ($alerts.Count -gt 0) {
    $body = "$($env:COMPUTERNAME) - allarme spazio disco:\n\n" + ($alerts -join "\n")
    $sec  = ConvertTo-SecureString $SmtpPass -AsPlainText -Force
    $cred = New-Object System.Management.Automation.PSCredential($SmtpUser, $sec)
    Send-MailMessage -From $Mittente -To $Destinatario -Subject "[ALERT] Disco pieno su $($env:COMPUTERNAME)" -Body $body -SmtpServer $SmtpServer -Port $SmtpPort -UseSsl -Credential $cred
    Write-Host "Inviata mail di alert"
} else {
    Write-Host "OK: nessun disco oltre soglia"
}

2. Test manuale

Apri PowerShell come amministratore e lancia:

powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\DiskMonitor.ps1

Per testare lo scenario di alert, abbassa temporaneamente $SogliaPerc a 10.

3. Schedulazione con Task Scheduler

  1. Apri Utilità di pianificazione (taskschd.msc).
  2. "Crea attività..." (non "Crea attività di base").
  3. Tab Generale: nome "DiskMonitor", spunta Esegui con i privilegi più elevati.
  4. Tab Trigger: nuovo trigger "Ogni giorno alle 07:00".
  5. Tab Azioni: nuova azione, programma powershell.exe, argomenti -ExecutionPolicy Bypass -File C:\Scripts\DiskMonitor.ps1.
  6. Salva e prova "Esegui" dal menu contestuale.

4. Sicurezza della password SMTP

Tenere la password in chiaro nello script è pratico ma scomodo. Per produzione, usa Export-CliXml con DPAPI:

# Esegui una volta come l'utente che lancerà lo script:
Get-Credential | Export-CliXml -Path C:\Scripts\smtp.cred.xml

# Nello script poi:
$cred = Import-CliXml -Path C:\Scripts\smtp.cred.xml

La credenziale è cifrata col profilo utente Windows e non utilizzabile da altri account.