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
- Apri Utilità di pianificazione (taskschd.msc).
- "Crea attività..." (non "Crea attività di base").
- Tab Generale: nome "DiskMonitor", spunta Esegui con i privilegi più elevati.
- Tab Trigger: nuovo trigger "Ogni giorno alle 07:00".
- Tab Azioni: nuova azione, programma
powershell.exe, argomenti-ExecutionPolicy Bypass -File C:\Scripts\DiskMonitor.ps1. - 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.