Powershell - Xpress Ping
Rédigé par Xpress
Aucun commentaire
Classé dans : Powershell
- - 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