El siguiente es un script al que en su momento le saque mucho provecho y había olvidado que lo tenia. Su función es verificar diariamente (mediante una tarea programada) el espacio libre disponible y en caso de que dicho espacio sea menor al umbral definido envía una alerta vía mail con el detalle. Adicionalmente en cada ejecución guarda un log.
El mismo está pensado para envíos desde cuentas Office365 pero es fácilmente adaptable a otras cuentas.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Script de JManzur | |
# Alojar Script en C:\IT\Script y crear el directorio C:\IT\LOG | |
# Defino Variables: | |
# Unidades a Monitorear, definir a $null para revisar todas las unidades o definir letra del siguiente modo: $drives = @("C","D"); | |
$drives = @("C"); | |
$FECHA = Get-Date -Format dd/MM/yyy | |
$FECHA2 = Get-Date -Format ddMMyyy | |
$IP = Test-Connection -ComputerName (hostname) -Count 1 | Select IPV4Address | |
# Indicar letra de unidade(s) separando por "," Ej: Get-PSDrive C,D,E | |
$ESPACIO = Get-PSDrive C | Select-Object Name, @{'Name'='Used (GB)'; 'Expression'={[math]::truncate($_.used / 1GB)}}, @{'Name'='Free (GB)';'Expression'={[math]::truncate($_.free / 1GB)}} | |
# Espacio minimo libre requerido para alertar | |
$minSize = 30GB; | |
# Capturo "Write-Host" para log | |
Start-Transcript -Path C:\IT\LOG\Revision_Discos_$FECHA2.log | |
if ($drives -eq $null -Or $drives -lt 1) { | |
$localVolumes = Get-WMIObject win32_volume; | |
$drives = @(); | |
foreach ($vol in $localVolumes) { | |
if ($vol.DriveType -eq 3 -And $vol.DriveLetter -ne $null ) { | |
$drives += $vol.DriveLetter[0]; | |
} | |
} | |
} | |
foreach ($d in $drives) { | |
Write-Host ("`r`n"); | |
Write-Host ("Revisando unidad " + $d + " ..."); | |
$disk = Get-PSDrive $d; | |
if ($disk.Free -lt $minSize) { | |
Write-Host ("Unidad " + $d + " Tiene menos de " + $minSize ` | |
+ " bytes Libres (" + $disk.free + "): Enviando Correo..."); | |
# Defino las variables necesarias para el envio de mail con office365 | |
$REMITENTE = "remitente@ejemplo.com" | |
$DESTINATARIOS = "destinatario@gmail.com" | |
$ASUNTO = "ALERTA!!! Poco espacio Unidad $d servidor $env:computername " | |
$CUERPO = ("El $FECHA se detecto que la Unidad $d del servidor:" + "`n" + "$env:computername - $IP" + "`n" + "Tiene menos de 30GB libres" + "`n" + "Reporte de Espacio:" + "`n" + "$ESPACIO"); | |
$SMTPServer = "smtp.office365.com" | |
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) | |
$SMTPClient.EnableSsl = $true | |
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("remitente@ejemplo.com", "SuperContraseña"); | |
$SMTPClient.Send($REMITENTE, $DESTINATARIOS, $ASUNTO, $CUERPO) | |
write-host "... Correo Enviado!" ; | |
} | |
else { | |
Write-Host ("Unidad " + $d + " Tiene mas de " + $minSize + " bytes Libres: Nada que hacer."); | |
} | |
} |