Программный Speed Test
Стоит задача фиксировать скорость интернета каждые 15 минут и писать ее в файл. Пришел в голову вариант работать с web-страницей Speed Test Но это муторно. Интересует вопрос: есть ли инструмент, позволяющий выполнять тест в скрипте. Библиотека или что-то еще. Спасибо
Ответы (1 шт):
Когда-то давал схожий ответ, как предлагал @andreymal. Продублирую здесь.
Можно было бы использовать встроенную утилиту bitsadmin.exe. Но у меня она часто зависала. Поэтому я использовал командлеты BitsTransfer. У меня получился следующий скрипт:
$file = $env:USERPROFILE + "\Downloads\trash.bin" #File download path
$URL = "http://speedtest.ftp.otenet.gr/files/test1Mb.db" #URL from online speed test service
$JobName = "MyJob" #Variable value for download job operations
Get-BitsTransfer -Name $JobName|Remove-BitsTransfer #Clear all same jobs before operations
Start-BitsTransfer -Source $URL -Destination $file -DisplayName $JobName -Asynchronous #Start download
$job= Get-BitsTransfer -Name $JobName #Select our download job
While ($job.JobState -ne "Transferred" ) {$job} #Wait for the file transfert
if ($job.JobState -eq "Transferred" ) {
$time = ($job.TransferCompletionTime - $job.CreationTime).TotalSeconds #count download spend time in seconds
$size = $job.BytesTransferred #count total transferred bytes
Write-Host ("Speed = " + $size / $time /1MB + " MB/s") #count and print speed
$job|Complete-BitsTransfer #finish download job
}
P.S. Кстати измерять скорость обмена можно не только с с HTTP-узлами, но и по протоколам SMB/CIFS,FTP. Следует иметь в виду, что обмен может быть не только типа download, но upload и uploadreply. Естественно, на измерение могут повлиять другие факторы: антивирус, медленная работа дисковой подсистемы, брандмауэр и пр.