Volete sapere quanto tempo impiegate a scaricare un file e quale è a velocità media del download? PowerShell li calcola al vostro posto. Lo script non è applicabile a tutti i tipi di download, dovete avere il link diretto del file da scaricare.

Come utilizzare PowerShell misurare velocità tempo impiegato download

Avvertenza: Non sono io l’autore degli script, mi sono limitato cercare sul Web e raccogliere quelli funzionanti e più interessanti.

Invoke-WebRequest

In questo script potete modificare il link del file da scaricare ($FILE) e il nome del file e la cartella di destinazione ($DEST).

  • # 1. Inserire indirizzo file da scaricare
  • $FILE = 'https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso'
  • $DEST = 'd:\ubuntu-22.04.3-desktop-amd64.iso'
  • "Download del file [$FILE]"
  • "Salvatagio file in [$DEST]"
  • # 2. Tempo del download
  • $Start = Get-Date
  • Invoke-WebRequest -Uri $FILE -OutFile $DEST
  • $End = Get-Date
  • # 3. Calcolo del tempo impiegato
  • $TimeTaken = $End-$Start
  • # 4. Visualizza il tempo impiegato
  • $Seconds = $TimeTaken.TotalSeconds
  • "Totale secondi impiegati per completare il download [$($TimeTaken.TotalSeconds)]"
  • # 5. Calcola la velocità
  • $Size = (Get-ChildItem -Path $DEST).Length
  • $Speed = ($Size/$Seconds).ToString('N2')
  • # 6. Visualizza la velocità media
  • "Velocità download (bytes/secondi) [$Speed]"

Come utilizzare PowerShell misurare velocità tempo impiegato download

Start-BitsTransfer

Una versione leggermente diversa dello script appena visto, che sfrutta il BitsTransfer per scaricare il file, il download del file è leggermente più lento rispetto a un download fatto con Invoke-WebRequest.

Anche in questo script potete modificare il link del file da scaricare ($FILE) e il nome del file e la cartella di destinazione ($DEST).

  • # 1. Defining the file to be tested
  • $FILE = 'https://endpoint920510.azureedge.net/s4l/s4l/download/win/Skype-8.106.0.210.exe'
  • $DEST = 'd:\skype.exe'
  • "Testing a download of [$FILE]"
  • "Storing at [$DEST]"
  • # 2. Timing the download
  • $Start = Get-Date
  • Start-BitsTransfer -Source $FILE -Destination $DEST
  • $End = Get-Date
  • # 3. Calculating the time taken
  • $TimeTaken = $End-$Start
  • # 4. Displaying time taken
  • $Seconds = $TimeTaken.TotalSeconds
  • "Total seconds taken to perform download [$($TimeTaken.TotalSeconds)"
  • # 5. Calculate bytes/sec
  • $Size = (Get-ChildItem -Path $DEST).Length
  • $Speed = ($Size/$Seconds).ToString('N2')
  • # 6. Display the speed achieved
  • "Download speed (bytes/second) [$Speed]"

Come utilizzare PowerShell misurare velocità tempo impiegato download

Questo script mostra solo una barra del progresso del download, non ne calcola il tempo e al termine si chiude.

  • $startBitsTransferSplat = @{
  • Source = ' https://endpoint920510.azureedge.net/s4l/s4l/download/win/Skype-8.106.0.210.exe '
  • Destination = 'd:\skype.exe'
  • }
  • Start-BitsTransfer @startBitsTransferSplat

Come utilizzare PowerShell misurare velocità tempo impiegato download

Simile al precedente script, ma in questa versione mostra il tempo impiegato dal download.

  • $stopwatch = [System.Diagnostics.Stopwatch]::new()
  • $stopwatch.Start()
  • $startBitsTransferSplat = @{ Source = 'https://endpoint920510.azureedge.net/s4l/s4l/download/win/Skype-8.106.0.210.exe’
  • Destination = 'd:\skype.exe'
  • }
  • Start-BitsTransfer @startBitsTransferSplat
  • $stopwatch.Stop() Write-Output $stopwatch.Elapsed

Come utilizzare PowerShell misurare velocità tempo impiegato download

Media dei tempi

Questo script calcola la media dei tempi ripetendo il download più volte, basta modificare il valore di $iterationNumber, togliendo il cancelletto, dalla riga # $ProgressPreference = 'SilentlyContinue', si può nascondere la barra di progressione del download. Questa è più una simulazione del download, perché salva il file nella cartella Temp e poi lo va a eliminare.

  • # Changing the progress preference to hide the progress bar.
  • # $ProgressPreference = 'SilentlyContinue'
  • $payloadUrl = 'https://endpoint920510.azureedge.net/s4l/s4l/download/win/Skype-8.106.0.210.exe'
  • $stopwatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'
  • $elapsedTime = [timespan]::Zero
  • $iterationNumber = 3
  • # Here we are using a foreach loop with a range,
  • # but this can also be accomplished with a for loop.
  • foreach ($iteration in 1..$iterationNumber) {
  • $tempFilePath = [System.IO.Path]::GetTempFileName()
  • $stopwatch.Restart()
  • Start-BitsTransfer -Source $payloadUrl -Destination $tempFilePath
  • $stopwatch.Stop()
  • Remove-Item -Path $tempFilePath
  • $elapsedTime = $elapsedTime.Add($stopwatch.Elapsed)
  • }
  • # Timespan.Divide is not available on .NET Framework.
  • if ($PSVersionTable.PSVersion -ge [version]'6.0') {
  • $average = $elapsedTime.Divide($IterationNumber)
  • } else { $
  • average = [timespan]::new($elapsedTime.Ticks / $IterationNumber)
  • }
  • return $average