public/Install-SpeedTestServer.ps1
function Install-SpeedTestServer { <# .SYNOPSIS Configures the local computer as an iPerf3 server. .DESCRIPTION Configures iPerf3 as a constantly-listening service on the local computer. .PARAMETER Port The port number that the iPerf3 server will listen on. If not specified, the default port '5201' will be used. .PARAMETER PassThru Returns the object returned by "Get-Process -Name 'iperf3' -ErrorAction 'SilentlyContinue'". .EXAMPLE Install-SpeedTestServer Sets up the local computer as an iPerf3 server listening on default iPerf port 5201. .EXAMPLE Install-SpeedTestServer -Port 5555 Sets up the local computer as an iPerf3 server listening on port 5555. .EXAMPLE Install-SpeedTestServer -Port 5555 -PassThru #> [CmdletBinding()] Param ( [ValidateNotNullOrEmpty()] [String] $Port = '5201', [Switch] $PassThru ) $timeout = 30 # Seconds if (!(Test-Administrator)) { throw 'You are not running as administrator. Please re-run this function after opening PowerShell as administrator.' } Write-Verbose -Message "Setting up iPerf3 server on local machine on port $Port." Install-ChocolateyGetProvider Install-iPerf3 Set-iPerf3Port -Port $Port Set-iPerf3Task -Port $Port $timeoutTimer = [Diagnostics.Stopwatch]::StartNew() $processTest = $false while ($timeoutTimer.Elapsed.TotalSeconds -lt $timeout) { $getProcessResult = Get-Process -Name 'iperf3' -ErrorAction 'SilentlyContinue' if ($getProcessResult) { Write-Verbose -Message "iPerf3 Server started on port $Port." $processTest = $true break } else { Start-Sleep -Seconds 3 } } $timeoutTimer.Stop() if (!($processTest)) { throw "iPerf3 Server failed to start on port $Port. Timeout of $timeout seconds reached." } if ($PassThru) { return $getProcessResult } } |