Monitorizar el disco duro y avisar por email si hay poco espacio libre

Hola,
A veces nos gustaría que un proceso nos avisara de que hay poco espacio libre en un disco duro antes de quedarnos sin el y que fallen las copias de seguridad.
He conseguido crear un script basado en el powershell de windows ( debéis tenerlo instalado ) para que un proceso compruebe todos los días el espacio libre en disco y nos
envíe un correo / email a nuestra cuenta si el espacio libre es menor de 5 gb.

Pasos a seguir:
1) El sistema operativo tiene que tener instalado el powershell
2) Hay que habilitar la ejecución de comandos. Abrimos el powershell y ejecutamos: powershell Set-ExecutionPolicy Unrestricted
3) Creamos un fichero con extensión .ps1 y escribimos este código

$DiskReport = ForEach ($Servernames in ('localhost'))
{Get-WmiObject win32_logicaldisk -ComputerName $Servernames -Filter "Drivetype=3" -ErrorAction SilentlyContinue |
#Devuelve las unidades que tienen de espacio menos de 5GB
Where-Object { ($_.freespace/ 1gb) -le '5'}
}

#create reports
$texto = $DiskReport |
Select-Object @{Label = "Server Name";Expression = {$_.SystemName}},
@{Label = "Drive Letter";Expression = {$_.DeviceID}},
@{Label = "Total Capacity (GB)";Expression = {"{0:N1}" -f( $_.Size / 1gb)}},
@{Label = "Free Space (GB)";Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) }},
@{Label = 'Free Space (%)'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} |
Out-String
$time = Get-Date -DisplayHint Time
$from = "soporte@uva.es"
$to = "soporte@uva.es"
$subject = "--- Poco sitio en discos ---"
$smtpserver = "cartero.es"
$user="usuario1"
$passwd = ConvertTo-SecureString "pass1" -AsPlainText -Force
$credenciales= New-Object System.Management.Automation.PSCredential ($user,$passwd)
foreach ($recipient in $to) {
if ($texto){
Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient -subject $subject -body $texto -credential $credenciales
}
}

4) Cambiamos los parametros del smtpserver, usuario y pass del servidor de correo para usar los vuestros.
5) Creamos una tarea programada donde cada día a la hora que queráis ejecute la siguiente sentencia: powershell "c:\comprobar_espacio_discos.ps1"

Y eso es todo.
Saludos.

Esta entrada fue publicada en cmd, shell scripts, Sistemas operativos. Guarda el enlace permanente.

6 respuestas a Monitorizar el disco duro y avisar por email si hay poco espacio libre

  1. Fabi dijo:

    Cada vez que intento, sea desde una cuenta gmail como office 365, me aparece el diálogo de error en smtp que dice :

    «Send-MailMessage : Error al procesar. La respuesta del servidor fue: 5.7.3 STARTTLS is required to send mail
    [SC1PR80CA0179.lamprd80.prod.outlook.com]
    En línea: 25 Carácter: 1
    + Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient – …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpExcept
    ion
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage»

    • Javier B. dijo:

      STARTTLS is required to send mail te esta avisando que requiere una conexion segura, para habilitar eso agrega el parametro -UseSSL en Send-MailMessage:

      Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient -subject $subject -body $texto -credential $credenciales -UseSSL

      Suerte!

  2. Cardotti dijo:

    Gracias Javier por la aportación

  3. Fabian dijo:

    Muchas gracias por el aporte

  4. Juan dijo:

    Buenos días

    ¿Donde tendría que añadir la ruta de un fichero con el listado de los servidores?

    Gracias de antemano

    Un saludo

  5. Fernando dijo:

    Buen día me arroja el siguiente error ¿Sabes a que se debe?
    Send-MailMessage : No es posible conectar con el servidor remoto
    En C:\Users\faguilar\Downloads\comprobar_espacio_discos.ps1: 25 Carácter: 1
    + Send-MailMessage -smtpServer $smtpserver -from $from -to $recipient – …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *