Il mantenimento di prestazioni di rete ottimali è fondamentale nel mondo IT. Un aspetto essenziale è quello di garantire che la velocità di Internet sia sempre conforme agli standard richiesti. I professionisti IT e i Managed Service Provider (MSP) hanno bisogno di metodi affidabili per misurare e verificare queste velocità.
Uno script PowerShell che automatizzi questo processo può far risparmiare tempo e garantire informazioni accurate e aggiornate. In questo articolo analizzeremo uno script progettato in modo specifico per eseguire un test di velocità di Internet utilizzando la CLI di Ookla e memorizzando i risultati in un campo personalizzato.
Background
Lo script fornito sfrutta la CLI di Ookla per eseguire test di velocità di Internet sui dispositivi Windows, ed è molto utile per i professionisti IT e gli MSP. Questo script affronta una sfida comune: testare e verificare la velocità di Internet su più dispositivi senza causare congestioni di rete. La randomizzazione dell’orario di inizio del test all’interno di una finestra di 60 minuti garantisce che i test siano distribuiti, riducendo la probabilità di test simultanei.
Lo script per eseguire test di velocità di Internet:
#Requires -Version 3.0 <# .SYNOPSIS Runs an internet speed test using Ookla Cli on the target windows device and saves the results to a Multi-Line Custom Field. .DESCRIPTION Runs an internet speed test using Ookla Cli on the target windows device and saves the results to a Multi-Line Custom Field. Script will pick a random time slot from 0 to 60 minutes to run the speed test. This lessens the likely hood that multiple devices are testing at the same time. The default custom field: speedtest .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 7, Windows Server 2012 Minimum PowerShell Version: 3.0 Release Notes: Renamed script and added Script Variable support By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). .COMPONENT Utility #> [CmdletBinding()] param ( [Parameter()] [string]$CustomField = "speedtest", [Parameter()] [switch]$SkipSleep = [System.Convert]::ToBoolean($env:skipRandomSleepTime) ) begin { if ($env:customFieldName -and $env:customFieldName -notlike "null") { $CustomField = $env:customFieldName } # add TLS 1.2 and SSL3 to allow Invoke-WebRequest to work under older PowerShell versions if ($PSVersionTable.PSVersion.Major -eq 2) { Write-Host "Requires at least PowerShell 3.0 to run." exit 1 } else { try { $TLS12Protocol = [System.Net.SecurityProtocolType] 'Ssl3 , Tls12, Tls11' [System.Net.ServicePointManager]::SecurityProtocol = $TLS12Protocol } catch { Write-Host "Failed to set SecurityProtocol to Tls 1.2, Tls1.1, and Ssl3" } } $CurrentPath = Get-Item -Path ".\" } process { # Random delay from 0 to 60 minutes in 2 minute time slots $MaximumDelay = 60 $TimeChunks = 2 $Parts = ($MaximumDelay / $TimeChunks) + 1 $RandomNumber = Get-Random -Minimum 0 -Maximum $Parts $Minutes = $RandomNumber * $TimeChunks if (-not $SkipSleep) { Start-Sleep -Seconds $($Minutes * 60) } # Get latest version of speedtest cli try { $Cli = Invoke-WebRequest -Uri "https://www.speedtest.net/apps/cli" -UseBasicParsing } catch { Write-Host "Failed to query https://www.speedtest.net/apps/cli for speed test cli zip." exit 1 } # Get the download link $Url = $Cli.Links | Where-Object { $_.href -like "*win64*" } | Select-Object -ExpandProperty href # Build the URL and destination path $InvokeSplat = @{ Uri = $Url OutFile = Join-Path -Path $CurrentPath -ChildPath $($Url | Split-Path -Leaf) } # Download the speedtest cli zip try { Invoke-WebRequest @InvokeSplat -UseBasicParsing } catch { Write-Host "Failed to download speed test cli zip from $Url" exit 1 } # Build the path to speedtest.exe $ExePath = Join-Path -Path $CurrentPath -ChildPath "speedtest.exe" $MdPath = Join-Path -Path $CurrentPath -ChildPath "speedtest.md" if ($(Get-Command -Name "Expand-Archive" -ErrorAction SilentlyContinue).Count) { Expand-Archive -Path $InvokeSplat["OutFile"] -DestinationPath $CurrentPath } else { # Unzip the speedtest cli zip Add-Type -AssemblyName System.IO.Compression.FileSystem if ((Test-Path -Path $ExePath)) { Remove-Item -Path $ExePath, $MdPath -Force -Confirm:$false -ErrorAction Stop } [System.IO.Compression.ZipFile]::ExtractToDirectory($InvokeSplat["OutFile"], $CurrentPath) } $JsonOutput = if ($(Test-Path -Path $ExePath -ErrorAction SilentlyContinue)) { # Run speed test and output in a json format try { Invoke-Command -ScriptBlock { & .\speedtest.exe --accept-license --accept-gdpr --format=json if (0 -ne $LASTEXITCODE) { Write-Error -Message "Failed to run speedtest.exe." } } } catch { Remove-Item -Path $ExePath, $MdPath, $InvokeSplat["OutFile"] -Force -Confirm:$false Write-Error -Message "Failed to run speedtest.exe." exit 1 } } if ($JsonOutput) { # Convert from Json to PSCustomObject $Output = $JsonOutput | ConvertFrom-Json # Output the results $Results = [PSCustomObject]@{ Date = $Output.timestamp | Get-Date ISP = $Output.isp Down = "$([System.Math]::Round($Output.download.bandwidth * 8 / 1MB,0)) Mbps" Up = "$([System.Math]::Round($Output.upload.bandwidth * 8 / 1MB,0)) Mbps" ResultUrl = $Output.result.url PacketLoss = $Output.packetLoss Jitter = $Output.ping.jitter Latency = $Output.ping.latency Low = $Output.ping.low High = $Output.ping.high } | Out-String $Results | Write-Host Ninja-Property-Set -Name $CustomField -Value $Results } Remove-Item -Path $ExePath, $MdPath, $InvokeSplat["OutFile"] -Force -Confirm:$false exit 0 } end { }
Analisi dettagliata
Lo script per effettuare test di velocità di Internet esegue diversi compiti chiave:
- Inizializzazione dei parametri: Imposta i parametri predefiniti e controlla le variabili d’ambiente.
- Configurazione TLS: Assicura l’impostazione dei protocolli di sicurezza appropriati per le versioni precedenti di PowerShell.
- Ritardo casuale: Introduce un ritardo casuale prima di eseguire il test di velocità per evitare la congestione della rete.
- Download della CLI di Speedtest: Scarica l’ultima versione della CLI di Ookla.
- Esecuzione del test di velocità: Esegue il test di velocità e cattura i risultati in formato JSON.
- Parsing e memorizzazione dei risultati: Converte i risultati JSON in un formato leggibile e li memorizza in un campo personalizzato.
Analisi dettagliata delle fasi
- Inizializzazione dei parametri Lo script per effettuare test di velocità di Internet inizia con la definizione dei parametri. $CustomField specifica dove verranno memorizzati i risultati e $SkipSleep è uno switch per saltare il ritardo randomizzato.
- Configurazione TLS Questa sezione assicura che siano abilitati i protocolli TLS appropriati, necessari per le richieste web sicure.
- Ritardo casuale Per evitare la congestione della rete, lo script attende un tempo casuale compreso tra 0 e 60 minuti prima di eseguire il test di velocità di Internet.
- Download della CLI di Speedtest Questa parte scarica ed estrae l’ultima CLI di Ookla.
- Esecuzione del test di velocità Lo script esegue il test di velocità di Internet e fornisce i risultati in formato JSON.
- I risultati vengono analizzati e memorizzati in un campo personalizzato.
Casi d’uso potenziali
Immagina un MSP che gestisce più reti di clienti. Distribuendo questo script sui computer dei clienti, l’MSP può raccogliere dati sulla velocità di Internet senza interventi manuali. Per esempio, se un cliente segnala una lentezza intermittente della velocità di Internet, l’MSP può esaminare i risultati ordinati in ordine cronologico dei test di velocità di Internet per identificare gli schemi e affrontare il problema in modo più efficace.
Confronti
Altri metodi per effettuare test di velocità di Internet possono essere l’utilizzo di strumenti basati sul Web o di applicazioni autonome. Anche se possono essere efficaci, mancano di automazione e di archiviazione centralizzata dei dati. Questo script PowerShell offre una soluzione snella e automatizzata che si integra perfettamente con i sistemi esistenti, offrendo un vantaggio significativo in termini di efficienza e gestione dei dati.
Domande frequenti
D1: Perché usare un ritardo casuale?
R1: Il ritardo casuale aiuta a evitare che più dispositivi eseguano il test di velocità contemporaneamente, il che potrebbe falsare i risultati e creare una congestione della rete.
D2: Questo script per effettuare test di velocità di Internet può essere eseguito su qualsiasi versione di PowerShell?
R2: Lo script per effettuare test di velocità di Internet richiede almeno PowerShell 3.0 a causa di alcune dipendenze dei cmdlet e delle configurazioni TLS.
D3: Cosa succede se il download di Ookla CLI non riesce?
R3: Lo script per effettuare test di velocità di Internet include la gestione degli errori per uscire e fornire un messaggio di errore se il download non riesce.
Implicazioni
Un test di velocità di Internet accurato può aiutare a identificare potenziali problemi di rete, comprese le anomalie legate alla sicurezza, come cali di velocità inaspettati che potrebbero indicare interferenze di rete o usi non autorizzati. Il monitoraggio regolare effettuato con questo script può fornire informazioni sulle prestazioni della rete e contribuire a mantenere solidi standard di sicurezza.
Raccomandazioni
- Programmazione regolare: Pianifica l’esecuzione dello script per effettuare test di velocità di Internet a intervalli regolari per un monitoraggio continuo.
- Esame dei risultati: Esamina periodicamente i dati raccolti per identificare le tendenze e affrontare eventuali problemi.
- Archiviazione sicura: Assicurati che i risultati siano conservati in modo sicuro per evitare accessi non autorizzati.
Considerazioni finali
L’utilizzo di questo script PowerShell per eseguire test di velocità di Internet offre un potente strumento ai professionisti IT e agli MSP. Automatizzando il processo e memorizzando i risultati in un campo personalizzato, lo script semplifica il monitoraggio delle prestazioni di rete. NinjaOne può migliorare ulteriormente questa capacità integrando lo script nella sua suite di strumenti, fornendo una piattaforma centralizzata per la gestione e l’analisi dei dati sulle prestazioni della rete.