Archivi tag: ookla

SpeedTest con Powershell

SpeedTest Vorreste testare la velocità della vostra linea internet con uno script?
Fatelo con PowerShell!

Ecco come fare:

#SPEED TEST

write-host "`nScript: "
write-host "SpeedTest con PowerShell"
write-host "-----------------------------------`n"

#IMPOSTAZIONE DELLA VELOCITA' MINIMA DA TESTARE
$MinimumSpeed=50


#SALVATAGGIO ATTUALE CONFIGURAZIONE SSL/TLS
#==========================================
$cur = [System.Net.ServicePointManager]::SecurityProtocol
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

#DOWNLOAD OOKLA ZIP
#==================
$OoklaWebPage=invoke-webrequest "https://www.speedtest.net/apps/cli" -UseBasicParsing | Select-Object -Property RawContent 
$OoklaWebPageRows=$OoklaWebPage -split "<"
$URL=((($OoklaWebPageRows | Select-String "win64") -split " " | Select-String "href") -split "`"")[1]
$output = "$env:TEMP\speedtest.zip"
$TempFileName = "$env:TEMP\speedtest.exe"
$FileName = "$env:SYSTEMROOT\SYSTEM32\speedtest.exe"
#Download last version zip file
Invoke-WebRequest -Uri $URL -OutFile $output -Headers @{"Cache-Control"="no-cache"}
#Expand the zip file
Expand-Archive -Path $output -DestinationPath "$env:TEMP\" -Force 


#Installa o aggiorna lo SpeedTest di Ookla 
write-host "`nSPEEDTEST.EXE CHECK INSTALLAZIONE"
write-host "---------------------------------"

if ((Test-Path $FileName)) {
    write-host -nonewline "SpeedTest already installed "
    $PrecVersion=(cmd /c $FileName -V | select-string "Ookla") -replace "`n", ""
    $LastVersion=(cmd /c $TempFileName -V | select-string "Ookla") -replace "`n", ""
        if ($PrecVersion -ne $LastVersion) {
            write-host "but a new version is available on Ookla website."
            write-host -nonewline "Installed version of Ookla Speedtest:"
            $PrecVersion
            Move-Item $TempFileName $FileName -force
            write-host "Ookla version updated to latest version: $LastVersion"
        } else {
            write-host "with same version available on Ookla website."
            write-host -nonewline "Installed version:"
            $PrecVersion
        }
} else {
    write-host "SpeedTest not retrieved. Install it..."
    Move-Item $TempFileName $FileName -force
    write-host -nonewline "Installed latest version of Ookla Speedtest:"
    (cmd /c $FileName -V | select-string "Ookla") -replace "`n", ""
}

#Esegue lo SpeedTest ed assegna il valore a un oggetto
$Speedtest = speedtest.exe -p no --format=json --accept-license --accept-gdpr | ConvertFrom-Json
#$Speedtest = Start-Process -FilePath "$env:SYSTEMROOT\SYSTEM32\speedtest.exe" -verb runas -ArgumentList {-p no --format=json --accept-license --accept-gdpr}| ConvertFrom-Json
write-host "`nDATI DA SPEEDTEST"
write-host "-------------------------------------"
$Speedtest
write-host "-------------------------------------"
 
[PSCustomObject]$SpeedObject = [ordered]@{
    Download_speed = [Math]::Round(($Speedtest.download.bandwidth/1000000) * 8, 0)
    Upload_speed   = [math]::Round($Speedtest.upload.bandwidth / 1000000 * 8, 1)
    Packet_loss    = [math]::Round($Speedtest.packetLoss)
    Latency       = [math]::Round($Speedtest.ping.latency)
    #ISP           = $Speedtest.isp
    External_IP    = $Speedtest.interface.externalIp
    Internal_IP    = $Speedtest.interface.internalIp
    #Used_Server    = $Speedtest.server.host
    #URL           = $Speedtest.result.url
    Jitter        = [math]::Round($Speedtest.ping.jitter)
    Timestamp = get-date -date ([DateTime]::Now) -Format g
}


#Test if a speed is too much slow
if (($SpeedObject.Download_speed -lt $MinimumSpeed) -and ($SpeedObject.Internal_IP)) {
    $Data= foreach ($val in $SpeedObject.Keys) {"$val=$($SpeedObject.Item($val))`n"}
    write-host "`nVELOCITA' BASSA"
    write-host "-------------------------------------"
    write-host "Riscontrata velocità internet troppo bassa (< $MinimumSpeed Mbps) su $env:COMPUTERNAME`n`n$Data"
    write-host "-------------------------------------"
}
    
    #SALVATAGGIO ATTUALE CONFIGURAZIONE SSL/TLS
    #==========================================
        $cur = [System.Net.ServicePointManager]::SecurityProtocol
        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

Si otterrà questo risultato:

SPEEDTEST.EXE CHECK INSTALLATION
--------------------------------
SpeedTest already installed with same version available on Ookla website.
Installed version:Speedtest by Ookla 1.2.0.84 (ea6b6773cf) Windows  AMD64

RAW DATA FROM SPEEDTEST
-------------------------------------


type       : result
timestamp  : 2024-09-08T08:40:19Z
ping       : @{jitter=1,500; latency=8,529; low=6,549; high=9,617}
download   : @{bandwidth=4713145; bytes=68382740; elapsed=15018; latency=}
upload     : @{bandwidth=51430; bytes=864340; elapsed=15003; latency=}
packetLoss : 0
isp        : Convergenze
interface  : @{internalIp=172.16.16.3; name=; macAddr=00:1C:42:2A:0D:8F; isVpn=False; externalIp=185.105.212.180}
server     : @{id=55285; host=speedtest2.convergenze.it; port=8080; name=Convergenze S.P.A S.B; location=Capaccio Paestum; country=Italy; ip=89.21.196.252}
result     : @{id=c017d084-b6c2-45ae-85b8-58af9cd6e5b2; url=https://www.speedtest.net/result/c/c017d084-b6c2-45ae-85b8-58af9cd6e5b2; persisted=True}

-------------------------------------

VELOCITA' BASSA
-------------------------------------
Riscontrata velocità internet troppo bassa (< 50 Mbps) su PARALLELS-PC

Download_speed=38
 Upload_speed=0.4
 Packet_loss=0
 Latency=9
 External_IP=185.105.12.180
 Internal_IP=172.16.16.3
 Jitter=2
 Timestamp=08/09/2024 10:40

-------------------------------------