Wir haben ein Windows-Bat-Skript zum Berechnen der Downloadrate mit dem folgenden ping
Befehl:
SETLOCAL ENABLEDELAYEDEXPANSION
set address=8.8.8.8
set packagesize=65500
set times=20
set accumulator=0
for /l %%a in (1,1,%times%) do (
for /f %%b in ('getms ping -n 1 -l %packagesize% %address%') do (
set /a "accumulator=!accumulator!+%%b"
)
)
set /v "velocity=!packagesize!*!times!/!accumulator!"
echo.!velocity!kbps
wo getms
sich ein weiterer Bat befindet, der viele for
Befehle verwendet, um den zurückgegebenen Millisekundenwert zu trennen ping
(der je nach Sprache variiert).
Bearbeitet: Nun, da die berechnete Bandbreite nichts mit der tatsächlichen Bandbreite zu tun hat, sondern ping
mit der Latenz und nicht mit der Übertragungsgeschwindigkeit, wie kann ich dieses Skript bearbeiten, damit es die richtige Downloadrate liefert? Gibt es eine Möglichkeit, das mit nativen Befehlen zu tun, nicht mit denen von Drittanbietern?
Antwort1
Sie könnenBITSum Ihr Softwarepaket herunterzuladen. Es ist so konzipiert, dass es nur die ungenutzte Netzwerkbandbreite nutzt, sodass der Download langsam erfolgt, falls der Computer bereits etwas herunterlädt.
Dann können Sie ein wenig warten und den Download-Fortschritt überwachen. Wenn er zu langsam ist, können Sie den Download entweder unterbrechen oder abbrechen. Wenn alles in Ordnung ist, lassen Sie ihn einfach abschließen.
Der einfachste Weg, BITS aufzurufen, ist PowerShell. Hier ist ein Code, der Ihnen den Einstieg erleichtert:
$transfer = Start-BitsTransfer -Asynchronous -Source 'http://mirror.yandex.ru/ubuntu-releases/17.04/ubuntu-17.04-server-i386.iso' -Destination 'c:\Temp'
$bytesTransferred = 0
while($transfer.JobState -eq 'Connecting' -or $transfer.JobState -eq 'Transferring')
{
$delay = 5
Start-Sleep -Seconds $delay
if ($transfer.JobState -eq 'Transferring')
{
$bytesDelta = $transfer.BytesTransferred - $bytesTransferred
$bytesTransferred = $transfer.BytesTransferred
# Check if speed is less than 1 MB/s
if ($bytesDelta -lt (1MB * $delay))
{
Write-Warning 'Download is too slow, aborting'
Remove-BitsTransfer $transfer
# Also can use Suspend-BitsTransfer $transfer to pause and Resume-BitsTransfer $transfer to resume
break
}
}
}
if ($transfer.JobState -eq 'Transferred')
{
Complete-BitsTransfer $transfer
Write-Information 'Download complete'
}
else
{
Write-Error "Download error $($transfer.ErrorDescription)"
}
Speichern Sie das Skript mit ps1
der Erweiterung und PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1
rufen Sie es aus einer Batchdatei auf (oder rufen Sie es einfach direkt auf).