Эта статья описывает, как можно автоматизировать проверку скорости (пропускной способности) интернета на Windows компьютере. Такая возможность будет удобной на серверах, где можно организовать такую проверку по расписанию и, при снижении скорости передачи, принять меры сразу, а не когда начнут жаловаться пользователи. Может использоваться и на клиентском компьютере, например, для проверки интернет соединения перед выгрузкой файла резервной копии на сервер – в случае медленного интернета дать сообщение пользователю и не пытаться выгружать большой файл.
Программа Ookla SpeedTest для командной строки Windows

Популярный онлайн сервис по проверке интернет соединения Ooka SpeedTest предлагает также консольную программу для выполнения этой же задачи. Программа доступна для различных платформ, редакция для Windows выполнена в виде exe файла и доступна для скачивания на официальном сайте speedtest.net.
Полностью возможности программы описаны в приложенной к ней справке, а для автоматической проверки удобно использовать режим вывода в TSV. (Tab Separated Values) В программе есть и другие варианты вывода информации, но TSV – самый простой для обработки в BAT.
В этом режиме программа выдаёт результаты измерения в одну строку значений, разделенных символом табуляции (TAB), например, так:
Telenet Solution Ltd - Moscow 21110 2.88 0.875 0 1958712 1201824 15619051 15137826 https://www.speedtest.net/result/c/cad67183-6e76-4146-a8f6-a39aff20290d 1
Значения скорости скачивания (download) и отдачи (upload) находятся в 6 и 7 столбцах (1958712 и 1201824 в этом примере). Значения указаны в байтах в секунду.
Можно анализировать и вывод программы в режиме, предназначенном для просмотра человеком (human readable):
C:\Temp>speedtest.exe --precision=0 --progress=no --unit=Mbps
Speedtest by Ookla
Server: Telenet Solution Ltd - Moscow (id = 21110)
ISP: OJSC Comcor
Latency: 2.96 ms (1.63 ms jitter)
Download: 17 Mbps (data used: 12.0 MB )
Upload: 15 Mbps (data used: 21.5 MB )
Packet Loss: 0.0%
Result URL: https://www.speedtest.net/result/c/f77a6aa9-1823-4f92-a817-f33af221ad9b
Здесь значения скорости выводятся в строках Download и Upload.
Командный файл
Чтобы в bat файле узнать скорость загрузки и отдачи, нужно считать значения Download и Upload, перевести их в Мбит/с как самый популярный вариант и затем сравнить с «хорошими» значениями. Полный код bat файлов находится по ссылке в конце статьи.
Измерение скорости загрузки и отдачи по выводу в tsv
Эта строка bat файла вызывает speedtest.exe, считывает значения из 6-го и 7-го столбцов и переводит из байт/с в Мбит/с
for /f "tokens=6,7 delims= " %%a in ('speedtest.exe --format=tsv') do set /a dl=8*%%a/1048576 && set /a ul=8*%%b/1048576
После выполнения этой команды в переменные %dl% и %ul% будут записаны значения Download и Upload. Например, так их можно вывести на экран.
echo Download %dl% Mbps, Upload %ul% Mbps
Измерение скорости загрузки и отдачи по выводу human readable
Получить значения Download и Upload можно такими командами в bat файле:
for /f "tokens=1-3" %%a in ('speedtest.exe --precision=0 --progress=no --unit=Mbps') do (
if "%%b" == "Download:" set dl=%%c
if "%%b" == "Upload:" set ul=%%c
)
Переменные %dl% и %ul% будут содержать значения значения сразу в Мбит/с.
Проверка значений и вывод результата
После того, как значения получены, можно сравнить их с нормальными с помощью оператора IF. Проверять нужно оба значения (скачивание и отдача), используя логику И / ИЛИ (см. Операторы AND / OR в bat файлах).
set nbw=16
if %dl% GEQ %nbw% (nhcolor 0A Нормальная скорость загрузки %dl% Мбит/с) else (nhcolor 0C Низкая скорость загрузки %dl% Мбит/с)
if %ul% GEQ %nbw% (nhcolor 0A Нормальная скорость отдачи %ul% Мбит/с) else (nhcolor 0C Низкая скорость отдачи %ul% Мбит/с)
Для вывода используется nhcolor вместо echo, потому что позволяет задать цвет текст текста – зелёный или красный, в зависимости от результата сравнения.

Показ всплывающего окна
Используя программу nhmb, bat файл сможет показывать всплывающее окно вместо вывода текста в консоль:
if %dl% GEQ %nbw% (set dlm=Нормальная скорость загрузки %dl% Мбит/с ) else (set dlm=Низкая скорость загрузки %dl% Мбит/с)
if %ul% GEQ %nbw% (set ulm=Нормальная скорость отдачи %ul% Мбит/с) else (set ulm=Низкая скорость отдачи %ul% Мбит/с)
set flags=error
if %dl% GEQ %nbw% if %ul% GEQ %nbw% set flags=information
nhmb "%dlm%\n%ulm%" "Проверка скорости интернета" "%flags%"
Текст сообщения будет содержать измеренные значения скорости, а значок будет показывать, есть ли отклонения:

Отправка смс или электронной почты
Для уведомления на мобильный можно добавить в bat файл вызов программы nhsms, которая отправит смс сообщение администратору через подключенный сотовый модем. Этот вариант ориентирован на сервера.
if %dl% GEQ %nbw% (set dlm=Нормальная скорость загрузки %dl% Мбит/с ) else (set dlm=Низкая скорость загрузки %dl% Мбит/с)
if %ul% GEQ %nbw% (set ulm=Нормальная скорость отдачи %ul% Мбит/с) else (set ulm=Низкая скорость отдачи %ul% Мбит/с)
nhsms "%dlm%. %ulm%"
Ну и, конечно, электронная почта – чтобы bat файл при плохих показателях отправлял письмо администратору. Как запрограммировать отправку почты, см. Отправить емейл из bat файла по SMTP.
Файлы для скачивания
Программу speedtest для Windows можно скачать со на страницы SPEEDTEST® CLI официального сайта SpeedTest На момент написания статьи доступна версия 1.1.1 (ookla-speedtest-1.1.1-win64.zip).
Также копия программы доступна для скачивания с Яндекс.Диска. По этой же ссылке находятся bat файлы и программы, описанные в этой статье.
- ish.bat – измерение по выводу speedtest в режиме human readable, выдает результат в текстовом виде с выделение цвета (nhcolor)
- ish-mb.bat – измерение по выводу speedtest в режиме human readable, выдает результат во всплывающем окне
- ist.bat – измерение по выводу speedtest в режиме
tsv
, выдает результат в текстовом виде с выделение цвета (nhcolor) - ist-mb.bat – измерение по выводу speedtest в режиме
tsv
, выдает результат во всплывающем окне
Измерение времени скачивания файла
Этот способ основан на измерении времени скачивания файла и поэтому не требует дополнительных exe программ.
bat файл скачивает заранее заданный файл и вычисляет скорость загрузки исходя из размера файла и затраченное времени:
@echo off
set fn=datafile10MB.dat
if exist %fn% del %fn%
cscript //nologo rt.js "powershell.exe (New-Object System.Net.WebClient).DownloadFile('https://nhutils.ru/static/datafile10MB.dat','%fn%')"
set /a dl=84000/%errorlevel%
set nbw=16
if %dl% GEQ %nbw% (nhcolor 0A Нормальная скорость загрузки %dl% Мбит/с) else (nhcolor 0C Низкая скорость загрузки %dl% Мбит/с)
Скачивание файла реализуется командой powershell, а замер времени – скриптом WSH/JScript rt.js
:
var wsh_shell = WScript.CreateObject("WScript.Shell");
var start_time = new Date();
var rc = wsh_shell.Run(WScript.Arguments.Item(0),0,true);
var stop_time = new Date();
var diff = stop_time - start_time;
WScript.Quit(diff);
Работа этого скрипта описана в статье Как измерить время выполнения в bat файле.
Заключение
Вариант с программой Ookla SpeedTest для командной строки
- позволяет замерить и скорость загрузки и скорость выгрузки
- более точные измерения
- бывают сложности с его работой в корпоративных сетях из-за фильтрации трафика
- требуется распространять exe файл вместе с bat файлом
- при первом запуске Ookla SpeedTest запрашивает подтверждение лицензионного соглашения
Вариант со скачиванием файла
- позволяет измерить только скорость скачивания
- невысокая точность
- не имеет сложностей с выходом в интернет, потому что просто скачивает файл по http
- не требует дополнительных exe файлов
Узнать больше
Операторы AND / OR в bat файлах
Программа nhcolor для изменения цвета текста в командной строке
Программа nhmb для вывода всплывающего окна MessageBox
Программа nhsms для отправки смс сообщений через сотовый модем
Отправить емейл из bat файла по SMTP
Не работает
[2023-07-19 15:00:25.939] [error] Configuration — Timeout was reached (TimeoutException) [2023-07-19 15:00:25.942] [error] Configuration — Cannot retrieve configuration document (0) [2023-07-19 15:00:25.943] [error] ConfigurationError — Could not retrieve or read configuration (Configuration) [2023-07-19 15:00:25.944] [error] ConfigurationError — Could not retrieve or read configuration (Configuration) [error] Configuration — Could not retrieve or read configuration (ConfigurationError) Непредвиденное появление: 16.
Эта ошибка возникает в самом speed test.exe, скорее всего, он не может достучаться до каких-то своих серверов из-за сетевых ограничений, например, на маршрутизаторе. Може е попробовать запустить то же самое, но из другой сети?
ну да, дома заработало. но это не то получается, я что не могу померить скорость в рабочей сети?
Добавил другой вариант bat файла, который не использует программу ookla, а просто скачивает файл и определяет скорость интернета как скорость скачивания этого файла по его размеру и времени скачивания.
Измерение времени скачивания файла