Comprobar el estado de una web por powershell

Feliz año nuevo a todos!!!!

Volvemos a la carga esta vez con un script de powershell para que nos avise en caso de que la web interna este caída, como por ejemplo, una de sharepoint, y además nos va a a indicar que servidor tiene problema, en caso que tengamos varios. Lo hice hace tiempo, pero creo que os puede ayudar bastante.

##===============================================================##
## Titulo       : Estado de web                                      ##
## Descripcion : valida el estado de la web interna                        ##
## Autor     : Daniel Fuentes                                                               ##
## Fecha        : 01/08/2017                                                                ##
## ===============================================================##


$log_file="C:\TEMP\xxxxx.log"
$nombre = hostname
$time = Get-Date | Out-String

$listado=@()
$URI=("http://www.xxxxxx.xx")
$URI | foreach{
    $hostRemoto=$_
    try{
        $site=invoke-webRequest -URI $hostRemoto
        write-host "${hostRemoto} está online"
        $listado+=New-Object PSObject -prop @{Host = $hostRemoto;Estado = "Online";} 
    }catch{
        $ex=$_
        switch($ex.exception.response.statusCode.value__){
            (404)
            {
                write-host "${hostRemoto} no encontrado ($ex.errorDetails.message)"
                $listado+=New-Object PSObject -prop @{Host = $hostRemoto;Estado = "Error";} 
                continue
            }
            (401)
            {
                write-host "${hostRemoto} pide credenciales"
                $listado+=New-Object PSObject -prop @{Host = $hostRemoto;Estado = "Error";} 
                continue
            }
            (500)
            {
                write-host "${hostRemoto} tiene errores ($ex.errorDetails.message)"
                $listado+=New-Object PSObject -prop @{Host = $hostRemoto;Estado = "Error";} 
                continue
            }
            default
            {
                write-host "${hostRemoto} no existe (${ex})"
                $listado+=New-Object PSObject -prop @{Host = $hostRemoto;Estado = "Offline";} 
                continue
            }
        }
    }
}

$listado | Out-File $log_file -width 240

if ($listado.Estado -ne "Online"  ) 

 { 

 

$smtp = "xxxx.xxxx.xxx"

$to = "xxxxxx@xxxxx.xxx", "xxxxxx@xxxx.xx", "xxxxxxx@xxxxx.xxx"

$from = "xxxxx@xxxx.xxx"

$subject = "Aviso: estado de la web --> " + $nombre
$body =  Get-Content $log_file  | Out-String

$body = $time

$body += "El servidor " + $nombre + " tiene un problema `n"




    foreach ($recipient in $to)
    {
        	
        Send-MailMessage -smtpServer $smtp -from $from -to $recipient -subject $subject  -body $body
    }




}
else
{


Remove-Item  C:\TEMP\xxxxxx.log

}

Además como nos va a mandar un mail que nos avisara del problema. Así que, podemos meterlo en el task manager (programador de tareas) y que se ejecute cada cierto tiempo.

web

Como siempre espero que os sirva.

 

Deja un comentario