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.
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»
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!
Gracias Javier por la aportación
Muchas gracias por el aporte
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
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