Con un simple ping nos vale para ver si una maquina esta levantada o no, pero cuando estamos haciendo seguimiento del estado de una maquina, o estamos haciendo una intervención y necesitamos recoger los tiempos de parada, nos interesa saber a que hora ha dejado de responder la maquina exactamente.
Podemos conseguir la información facilmente con un poco de powershell:
En la consola nos mostrara el resultado del ping cada 4 segundos, pintando la linea en rojo si da time out o en blanco si responde.
En el fichero log unicamente registrara los cambios de estado, es decir, el primer ping que de timeout o que responda.
Si quereis usar el cmdlet test-connection en lugar del objeto System.Net.Networkinformation.Ping:
El cmdlet test-connection tiene un parametro -quiet que nos devuelve unicamente $true o $false. En este caso no lo he usado porque me interesaba el tiempo de respuesta ($resultado.responsetime)
Podemos conseguir la información facilmente con un poco de powershell:
if ($args[0] -eq $null) { $strComputer=read-host "Maquina?" } else { $strComputer=$args[0] } $ping = new-object System.Net.Networkinformation.Ping $a=0 #inicializo la variable para el bucle infinito $coloranterior="x" #inicializo el color anterior a un valor cualquiera do { $resultado=$ping.send($strComputer) $hora=get-date -format T #"DestinationHostUnreachable","TimedOut" if ($resultado.status -eq "Success"){$color="white"}else{$color="darkgray"} write-host "$hora Ping $($strComputer.toupper()) $($resultado.address) $($resultado.status)" -fore $color if ($coloranterior -ne $color){$coloranterior=$color;out-file ".\pingtime.$strComputer.log" -input "$hora Ping $($strComputer.toupper()) $($resultado.address) $($resultado.status)" -append} start-sleep -s 4 #segundos de espera entre pings } while ($a -eq 0) #BUCLE INFINITO
En la consola nos mostrara el resultado del ping cada 4 segundos, pintando la linea en rojo si da time out o en blanco si responde.
En el fichero log unicamente registrara los cambios de estado, es decir, el primer ping que de timeout o que responda.
Si quereis usar el cmdlet test-connection en lugar del objeto System.Net.Networkinformation.Ping:
$erroractionpreference="SilentlyContinue" if ($args[0] -eq $null){$strComputer=read-host "Maquina?"} else{$strComputer=$args[0]} #-------variables a cambiar--------- $segundos=4 $logfile=".\pingtime.$strComputer.log" #----------------------------------- $msg="------- Ejecutando PingTime cada $segundos segundo(s) -------" write-host $msg -fore cyan out-file $logfile -input $msg -append do { $hora=get-date -uformat "%d/%m/%Y %H:%M:%S" $resultado = Test-Connection -ComputerName $strComputer -Count 1 -BufferSize 16 if ($? -eq $true){$color="white";$status="Success ($($resultado.responsetime) ms)"} else{$color="darkgray";$status="TimedOut"} $msg="$hora Ping $($strComputer.toupper()) $status" write-host $msg -fore $color if ($coloranterior -ne $color){$coloranterior=$color;out-file $logfile -input $msg -append} start-sleep -s $segundos } while ($a -eq $null) #BUCLE INFINITO
El cmdlet test-connection tiene un parametro -quiet que nos devuelve unicamente $true o $false. En este caso no lo he usado porque me interesaba el tiempo de respuesta ($resultado.responsetime)
Comentarios
Publicar un comentario