# 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.");
    }
}