Accueil Logiciels
routeur4g.fr est financé par ses lecteurs. Quand vous achetez en passant par les liens du site, nous pouvons toucher une commission d’affiliation.

[TUTO] Script Powershell monitoring de débits Speedtest CLI

romain1985romain1985 Membre Messages: 158
Bonjour,
Pour ceux qui veulent mettre en place une surveillance de votre débit, je vous propose la mise en place d'un script par tâche planifiée (toutes les 10min par exemple).

Attention, faire attention à ne pas laisser tourner la tâche à des moments non désirées. Pensez à ceux qui sont connectés sur la même cellule 3G/4G/5G que vous! ;)


Source du Script original :

Script modifié :
Il va écrire les données utiles dans un fichier texte lisible facilement. (si quelqu'un veut m'aider sur l'alignement des colonnes, je suis preneur!) Au pire, on peut facilement renvoyer les données dans un fichier Csv pour ceux qui veulent vraiment exploiter ou faire des graphiques.

Étapes à suivre :
1. Télécharger et dézipper le fichier https://install.speedtest.net/app/cli/ookla-speedtest-1.0.0-win64.zip
2. Créer le script Powershell SpeedTest-Historique.ps1 dans le dossier, mettre à jour le chemin du binaire à ligne 3

$DateLog = Get-Date -Format "dd/MM/yyyy HH:mm K"
$datePrefix = Get-Date -Format "yyyyMM_"
$DownloadLocation = "C:\Users\Utilisateur\Downloads\ookla-speedtest-1.0.0-win64"
$SpeedTestTxt = $DownloadLocation + "\" + $datePrefix + "speedtest_history.txt"

$SpeedtestResults = & "$($DownloadLocation)\speedtest.exe" --format=json --accept-license --accept-gdpr
$SpeedtestResults = $SpeedtestResults | ConvertFrom-Json

[PSCustomObject]$SpeedtestObj = @{
downloadspeed = [math]::Round($SpeedtestResults.download.bandwidth / 1000000 * 8, 2)
uploadspeed = [math]::Round($SpeedtestResults.upload.bandwidth / 1000000 * 8, 2)
packetloss = [math]::Round($SpeedtestResults.packetLoss)
isp = $SpeedtestResults.isp
ExternalIP = $SpeedtestResults.interface.externalIp
InternalIP = $SpeedtestResults.interface.internalIp
UsedServer = $SpeedtestResults.server.host
ResultsURL = $SpeedtestResults.result.url
Jitter = [math]::Round($SpeedtestResults.ping.jitter)
Latency = [math]::Round($SpeedtestResults.ping.latency)
}

$PublicIP = $SpeedtestObj.ExternalIP
$SpeedTestResultDownload = $SpeedtestObj.downloadspeed
$SpeedTestResultDownload = "{0:#,##0.00;(#,##0.00);ERREUR}" -f $SpeedTestResultDownload
$SpeedTestResultUpload = $SpeedtestObj.uploadspeed
$SpeedTestResultUpload = "{0:#,##0.00;(#,##0.00);ERREUR}" -f $SpeedTestResultUpload
$SpeedTestResultLatency = $SpeedtestObj.Latency
$SpeedTestResultLossPk = ($SpeedtestObj.packetloss).tostring("P")
$SpeedTestResultISP = $SpeedtestObj.isp
$SpeedTestResultServer = $SpeedtestObj.UsedServer
$SpeedTestResultServerId = $SpeedtestResults.server.id
$SpeedTestResultServerId1 = "{0:00000}" -f $SpeedTestResultServerId
$SpeedTestResultServerLocation = $SpeedtestResults.server.location

"$DateLog`t DL: $SpeedTestResultDownload`tMbps UL: $SpeedTestResultUpload`tMbps PING: $SpeedTestResultLatency`tms LOSS: $SpeedTestResultLossPk ISP: $PublicIP ($SpeedTestResultISP) SERVER: $SpeedTestResultServerLocation ; id = $SpeedTestResultServerId1 ($SpeedTestResultServer)" | Out-File -Append -Encoding ascii -FilePath $SpeedTestTxt


3. Créer la tâche planifiée :

Dans l'onglet Actions, le programme a lancer c'est Powershell :
c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

et en argument :
-ExecutionPolicy Bypass "C:\Users\Utilisateur\Downloads\ookla-speedtest-1.0.0-win64\SpeedTest-Historique.ps1"

4. Exemple de résultats :

Fibre Freebox 1Gbits :

15/08/2021 12:54 +02:00	   DL: 545,34	Mbps   UL: 345,07	Mbps   PING: 14	ms   LOSS: 0,00 %   ISP: 91.XXX.XX.XX (Free SAS)   SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 12:55 +02:00 DL: 343,07 Mbps UL: 440,47 Mbps PING: 14 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 12:56 +02:00 DL: 487,79 Mbps UL: 456,75 Mbps PING: 13 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 12:57 +02:00 DL: 275,52 Mbps UL: 443,94 Mbps PING: 13 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 12:58 +02:00 DL: 247,12 Mbps UL: 427,34 Mbps PING: 14 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 12:59 +02:00 DL: 199,04 Mbps UL: 403,99 Mbps PING: 14 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 13:00 +02:00 DL: 481,64 Mbps UL: 134,18 Mbps PING: 13 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 13:01 +02:00 DL: 421,28 Mbps UL: 437,63 Mbps PING: 14 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 13:02 +02:00 DL: 297,65 Mbps UL: 382,15 Mbps PING: 14 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 13:03 +02:00 DL: 223,35 Mbps UL: 336,87 Mbps PING: 14 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)
15/08/2021 13:04 +02:00 DL: 185,46 Mbps UL: 372,53 Mbps PING: 13 ms LOSS: 0,00 % ISP: 91.XXX.XX.XX (Free SAS) SERVER: Nice ; id = 08195 (62.XXX.XX.XXX)

4G Free :

15/08/2021 12:54 +02:00	   DL: 30,83	Mbps   UL: 31,24	Mbps   PING: 59	ms   LOSS: 0,00 %   ISP: 37.XXX.XX.X (Free Mobile SAS)   SERVER: Paris ; id = 24215 (montsouris3.speedtest.orange.fr) URL: https://www.speedtest.net/result/c/656f8375-6b8b-4f75-af84-08d721a1c48a
15/08/2021 12:55 +02:00 DL: 36,99 Mbps UL: 33,45 Mbps PING: 80 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 06027 (lg.par-c.fdcservers.net) URL: https://www.speedtest.net/result/c/bcc2b371-b279-4def-bc7c-bd52e8beaa8b
15/08/2021 12:56 +02:00 DL: 44,68 Mbps UL: 31,38 Mbps PING: 80 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 27961 (perf.keyyo.net) URL: https://www.speedtest.net/result/c/42e26d74-858f-42d1-b7b0-175278108e62
15/08/2021 12:57 +02:00 DL: 39,31 Mbps UL: 31,39 Mbps PING: 80 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 37862 (speedtest.rotvusca.com) URL: https://www.speedtest.net/result/c/2b849a40-0641-4829-9c3f-e57568f95cb5
15/08/2021 12:58 +02:00 DL: 54,77 Mbps UL: 32,13 Mbps PING: 80 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 37862 (speedtest.rotvusca.com) URL: https://www.speedtest.net/result/c/afefa77d-511b-4293-be82-2cd52c35439f
15/08/2021 12:59 +02:00 DL: 68,92 Mbps UL: 29,86 Mbps PING: 55 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 12746 (speedtest.mire.sfr.net) URL: https://www.speedtest.net/result/c/bc76c9a9-efb3-4ada-9c46-9693a07d8e0d
15/08/2021 13:00 +02:00 DL: 37,49 Mbps UL: 30,43 Mbps PING: 77 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 33869 (speedtest.lekloud.net) URL: https://www.speedtest.net/result/c/437d1f01-26da-4eff-ad22-a6aa91498ad1
15/08/2021 13:01 +02:00 DL: 24,43 Mbps UL: 30,40 Mbps PING: 79 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 27961 (perf.keyyo.net) URL: https://www.speedtest.net/result/c/4b32067b-6fda-41d5-9da6-df0744a7bb70
15/08/2021 13:02 +02:00 DL: 69,01 Mbps UL: 31,75 Mbps PING: 80 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 36311 (ookla.unyc.io) URL: https://www.speedtest.net/result/c/7fb75d01-54b0-4e94-9320-d0697799ec22
15/08/2021 13:03 +02:00 DL: 28,31 Mbps UL: 30,82 Mbps PING: 78 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 37862 (speedtest.rotvusca.com) URL: https://www.speedtest.net/result/c/e49a937c-5a5f-43c0-bd4e-96700cb81cfd
15/08/2021 13:04 +02:00 DL: 32,02 Mbps UL: 33,26 Mbps PING: 66 ms LOSS: 0,00 % ISP: 37.XXX.XX.X (Free Mobile SAS) SERVER: Paris ; id = 27961 (perf.keyyo.net) URL: https://www.speedtest.net/result/c/b1028aee-5148-412c-b6b0-32551a5b2130




Réponses

  • ludovickludovick Membre Messages: 8188
    Modifié (août 2021)
    Merci pour ce script, petite précision à la ligne 3 ne pas inclure dans le chemin du binaire un accent.

    J'ai fait un fichier pour tableur en csv à la place du txt : 
    remplacer la ligne 4 par
    $SpeedTestTxt = $DownloadLocation + "\" + $datePrefix + "speedtest_history.csv"
    et la ligne 35 par
    <div>"$DateLog`t;$SpeedTestResultDownload`t;$SpeedTestResultUpload`t;$SpeedTestResultLatency`t;$SpeedTestResultLossPk;$PublicIP;$SpeedTestResultISP;$SpeedTestResultServerLocation;$SpeedTestResultServerId1;$SpeedTestResultServer" | Out-File -Append -Encoding ascii -FilePath $SpeedTestTxt</div><div></div>
    les champs sont séparés par ";"
    titre des champs : Date;DL;UL;ping;pertes;IP;ISP;lieu;ID;Serveur

    Message edité par ludovick on
Connectez-vous ou Inscrivez-vous pour répondre.