Tenemos un script bat de Windows para calcular la velocidad de descarga mediante ping
el comando:
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
donde getms
hay otro murciélago que usa muchos for
comandos para separar el valor de milisegundos devuelto ping
(que varía según el idioma).
Editado: Bueno, dado que ese ancho de banda calculado no está relacionado con el ancho de banda real, una vez que ping
está relacionado con la latencia, no con la velocidad de transferencia, ¿cómo puedo editar ese script para que coincida con la velocidad de descarga correcta? ¿Alguna forma de hacerlo con comandos nativos, no con comandos de terceros?
Respuesta1
Puedes usarBITSpara descargar su paquete de software. Está diseñado para utilizar únicamente el ancho de banda de red inactivo, por lo que se descargará lentamente en caso de que la máquina ya esté descargando algo.
Luego puedes esperar un poco y monitorear el progreso de la descarga. Si es demasiado lento, puedes suspender o cancelar la descarga. Si está bien, déjelo completar.
La forma más sencilla de invocar BITS es PowerShell. Aquí hay un código para comenzar:
$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)"
}
Guarde el script con ps1
extensión y utilícelo PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1
para llamarlo desde un archivo por lotes (o simplemente llámelo directamente).