Existe alguma maneira de encontrar a taxa de download e upload por lote no Windows?

0

Temos um script de morcego do Windows para calcular a taxa de download por meio do comando ping :

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

onde getms é outro morcego que usa muitos comandos for para separar o valor em milissegundos retornado por ping (que varia de acordo com a linguagem).

Editado: Bem, como essa largura de banda calculada não está relacionada com a largura de banda real, uma vez que ping está relacionado à latência, não à velocidade de transferência, como posso editar esse script para corresponder à taxa de download correta? Qualquer maneira de fazer isso com comandos nativos, não de terceiros?

    
por kokbira 27.09.2017 / 15:26

1 resposta

1

Você pode usar o BITS para fazer o download do seu pacote de software. Ele é projetado para usar apenas a largura de banda da rede ociosa, portanto, ele será baixado lentamente, caso a máquina já esteja fazendo o download de algo.

Depois, você pode esperar um pouco e monitorar o progresso do download. Se estiver muito lento, você pode suspender ou cancelar seu download. Se estiver tudo bem, basta deixá-lo completo.

A maneira mais fácil de invocar o BITS é o PowerShell. Aqui está um código para você começar:

$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)"    
}

Salve o script com a extensão ps1 e use PowerShell -ExecutionPolicy Unrestricted -File YourScript.ps1 para chamá-lo a partir do arquivo em lote (ou simplesmente chamá-lo diretamente).

    
por 27.09.2017 / 21:08