Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
107 lines (91 sloc) 3.91 KB
function Set-SpeedTestConfig {
<#
.SYNOPSIS
Set the default server configurations for Internet and Local speed test servers.
.DESCRIPTION
Set the default server configurations for Internet and Local speed test servers.
Convert parameter values to appropriate PSCustomObject and write to the JSON configuration file.
.PARAMETER InternetServer
The server that will be utilized when running "Invoke-SpeedTest -Internet".
.PARAMETER InternetPort
The port that will be utilized when running "Invoke-SpeedTest -Internet".
.PARAMETER LocalServer
The server that will be utilized when running "Invoke-SpeedTest -Local".
.PARAMETER LocalPort
The port that will be utilized when running "Invoke-SpeedTest -Local".
.EXAMPLE
Set-SpeedTestConfig -InternetServer "test.public.com" -InternetPort "5201"
Sets the default Internet speed test server to "test.public.com" on port "5201".
.EXAMPLE
Set-SpeedTestConfig -InternetServer "test.public.com"
Sets the default Internet speed test server to "test.public.com".
When running a speed test, the last saved Internet port will be utilized, or the default port "5201".
.EXAMPLE
Set-SpeedTestConfig -InternetPort "5201"
Sets the default Internet speed test port to "5201".
Requires a previously-saved Internet speed test server.
.EXAMPLE
Set-SpeedTestConfig -LocalServer "test.local.com" -LocalPort "5201"
Sets the default Local speed test server to "test.local.com" on port "5201".
.EXAMPLE
Set-SpeedTestConfig -LocalServer "test.local.com"
Sets the default Local speed test server to "test.local.com".
When running a speed test, the last saved Local port will be utilized, or the default port "5201".
.EXAMPLE
Set-SpeedTestConfig -Local "5201"
Sets the default Local speed test port to "5201".
Requires a previously-saved Local speed test server.
#>
[CmdletBinding()]
Param(
[ValidateNotNullOrEmpty()]
[String]
$InternetServer,
[ValidateNotNullOrEmpty()]
[String]
$InternetPort,
[ValidateNotNullOrEmpty()]
[String]
$LocalServer,
[ValidateNotNullOrEmpty()]
[String]
$LocalPort
)
try {
Write-Verbose -Message 'Trying Get-SpeedTestConfig before Set-SpeedTestConfig.'
$config = Get-Content -Path "$PSScriptRoot\config.json" -ErrorAction 'Stop' |
ConvertFrom-Json
Write-Verbose -Message 'Stored config.json found.'
} catch {
Write-Verbose -Message 'No configuration found - starting with empty configuration.'
$jsonString = @'
{
"defaultLocalServer" : {
"defaultServer" : "",
"defaultPort" : ""
},
"defaultInternetServer" : {
"defaultServer" : "",
"defaultPort" : ""
}
}
'@
$config = $jsonString |
ConvertFrom-Json
}
# Detailed parameter validation against current configuration
if ($InternetPort -and (!($InternetServer)) -and (!($config.defaultInternetServer.defaultServer))) {
throw 'Cannot set an Internet port with an empty InternetServer setting.'
}
if ($LocalPort -and (!($LocalServer)) -and (!($config.defaultLocalServer.defaultServer))) {
throw 'Cannot set a Local port with an empty LocalServer setting.'
}
if ($InternetServer) {$config.defaultInternetServer.defaultServer = $InternetServer}
if ($InternetPort) {$config.defaultInternetServer.defaultPort = $InternetPort}
if ($LocalServer) {$config.defaultLocalServer.defaultServer = $LocalServer}
if ($LocalPort) {$config.defaultLocalServer.defaultPort = $LocalPort}
Write-Verbose -Message 'Setting config.json.'
$config |
ConvertTo-Json |
Set-Content -Path "$PSScriptRoot\config.json"
}
You can’t perform that action at this time.