Powershell - Xpress Ping

Rédigé par Xpress Aucun commentaire
Classé dans : Powershell Mots clés : Powershell, Ping, Stats
Voici un petit script que j'ai développé dans l'idée de s'appuyer sur un "simple" ping et effectuer quelques calculs : )
  • - Récupération d'une moyenne arrondie
  • - Pourcentage de réussite
  • - Quantité échoués
  • - Moyenne de temps(Ms)
  • - Écart type
  • - Écart max
# Récupération de la date
$TimeStart = Get-Date

# Définition de temp de travail (en minutes)
$TimeEnd = $timeStart.addminutes(1)

# Affichage des temps de début et de fin
Write-Host "Start Time: $TimeStart"
write-host "End Time:  $TimeEnd"

# Suppression de tout log précédent
Remove-Item temp.log


# Définition de la fonction de ping et affichage de résultat
function ping-ip
{
param($ip)
# On Récupère la date au format JOUR/MOIS/ANNEE
$Date = get-date -uformat %d/%m/%Y
# On Récupère la l'heure au format  HEURES/MINUTES/SECONDES
$Heure = get-date -uformat %H:%M:%S


# Classe ping : Permet à une application de déterminer si un ordinateur distant est accessible sur le réseau.
$ping = New-Object System.Net.NetworkInformation.ping
$job = $ping.send($ip)
# Roundtriptime = Temps en ms ( ex : Test-NetConnection -ComputerName www.microsoft.com | Select -ExpandProperty PingReplyDetails | FT Address, Status, RoundTripTime -Autosize)
$ms = $job.roundtriptime


# Si i répond on affiche le détail et on dit que c'est en cours...
if ($job.Status -eq "Success" )
    {
    Write-Host "Analyse en cours : il est [$TimeNow] Fin : [$TimeEnd] "
      Write-Output "OK - $()Le $Date à $Heure vers  $ip - Temps(ms) :    $ms"  >> temp.log

    }
else
    { 
    # Sinon on un affiche que ça répond pas mais que c'est toujours en cours
    Write-Host "Analyse en cours : il est [$TimeNow] Fin : [$TimeEnd] "
    Write-Output "KO - $()Le $Date - $Heure  - Pas de liaison !"  >> temp.log
        }
        #ON attends 0 secondes entre chaque boucle car le ping se fait déja chaque seconde
      Start-Sleep -Seconds 0
}
do {
# Condition sur laquelle s'appuie la boucle
$TimeNow = Get-Date
ping-ip www.xpress.fr ; Wait-Event -Timeout 1 }
# Condition pendant laquelle la boucle continue ( tant que le temps actuel n'est pas plus grand de 1 seconde du temps défini ...)
#until ($TimeNow -ge $TimeEnd){}
until ($TimeNow -ge $TimeEnd){}


# On récupère le contenu du fichier tout en 'oubliant' la première sortie(ligne)
$RecupQlignes = Get-Content temp.log | select -skip 1 | Measure-Object -Line


# On récupère le nombre de lignes
$TotalQlignes = $RecupQlignes.lines
Write-Host "Total Envoyés : $TotalQlignes "


# On filtre les ping reçus et on les compte tout en 'oubliant' encore la première sortie(ligne)

$TotalMs = 0
$Max = 0
$Min = 1000
get-content temp.log | where {$_ -match "www.xpress.fr"} | select -skip 1 |
    foreach {
    [int]$Quatredernierschiffres = $_.Substring($_.Length-4)
    $TotalMs = $TotalMs + $Quatredernierschiffres
      if ($Quatredernierschiffres -gt $Max) { $Max = $Quatredernierschiffres }
      if ($Quatredernierschiffres -lt $Min) { $Min = $Quatredernierschiffres }         
      $Compteur++
}

# On récupère la moyenne des milisecondes des ping ok
$MoyenneMS = $TotalMs / $Compteur

#on arrondie la moyenne a 2 chiffres après la virgule (pour l'affichage)
$MoyenneMSarr = [math]::Round($MoyenneMS,2)
write-host "La Moyenne de temps (en Milisecondes) est de : $MoyenneMSarr"
Write-Host "Le nombre de Ping Envoyés est de $TotalQlignes"
Write-Host "Le nombre de Ping reçus est de $Compteur"

# Calcul du pourcentage
$Pourcentage = (100 * $Compteur) / $TotalQlignes
Write-Host "Le pourcentage de réussite est de $Pourcentage %"

#On récupère le nombre de ping ratés
$RecupQligneshs = ($TotalQlignes - $Compteur)

#On récupère le total des milisecondes des pings ratés à raison de 1000 ms par échoué
$TotalMshs = $RecupQligneshs * 1000

#On cumule les milisecondes des pings ratés à ceux des réussis
$TotalAllms = $TotalMshs + $TotalMs

#On fait la moyenne de tous les milisecondes ratés et reussis
$MoyenneAll = ($TotalAllms / $TotalQlignes)

#On reboucle pour calculer l'étape 2 de l'ecart type ( chaque valeur en ms - la moyenne, le tout au carré
$CarredelecartTotal = 0
$Totalcarreecart = 0
$Valeurmoinsmoyenne = 0
get-content temp.log | where {$_ -match "www.xpress.fr"} | select -skip 1 |
    foreach {
    $Quatredernierschiffres = $_.Substring($_.Length-4)
    $Valeurmoinsmoyenne =  $Quatredernierschiffres - $MoyenneAll
    $Valeurmoinsmoyenneaucarre = $Valeurmoinsmoyenne * $Valeurmoinsmoyenne
    $CarredelecartTotal = $CarredelecartTotal + $Valeurmoinsmoyenneaucarre
}

#Etape 3 du calcul de l'écart-type  = on divise le total trouvé à l'étape 2 par le nombre d'objets
$Divisepareffectifserie = $CarredelecartTotal / $TotalQlignes

#Etape 4 on calcule la racine rarrée du résultat
$EcartType0 = [math]::Sqrt($Divisepareffectifserie)

#on arrondie l'écart-type 2 chiffres après la virgule (pour l'affichage)
$EcartType = [math]::Round($EcartType0,2)

#Caclcul de l'écart maximal (uniquement sur les piongs réussis)
$EcartMax = ($Max- $Min)

write-host "L'écart Maximum (sur les pings réussis) est de $EcartMax"

#On Récupère le type de carte réseau utilisée :
$Interface = test-netconnection | Select -Property InterfaceAlias
$Interfacevalue = $Interface.InterfaceAlias

$Hostname = Hostname

#Envoi du mail final
$EmailTo = "contact@xpress.fr"
$EmailFrom = "contact@xpress.fr"
$Subject = "Analyse Ping - $Hostname"
$Body = "Voici le résultat :`r La Moyenne de temps est de : $MoyenneMSarr ms`r Le nombre de Ping Envoyés est de $TotalQlignes `r Le nombre de Ping reçus est de $Compteur`r Le pourcentage de réussite est de $Pourcentage % `r L'écart-type est de $EcartType `r L'écart Maximum (sur les pings réussis) est de $EcartMax `r L'interface est : $Interfacevalue `r Bonne journée !"
$SMTPServer = "smtpauth.xpress.fr"
$filenameAndPath = "temp.log"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)
$SMTPMessage.Attachments.Add($attachment)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $false
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("contact@xpress.fr", "password");
$SMTPClient.Send($SMTPMessage)

pause

Écrire un commentaire

Quelle est le cinquième caractère du mot 4ulnbr ?

Fil RSS des commentaires de cet article