SpeedTest-CLI.psm1
# Module created by Microsoft.PowerShell.Crescendo class PowerShellCustomFunctionAttribute : System.Attribute { [bool]$RequiresElevation [string]$Source PowerShellCustomFunctionAttribute() { $this.RequiresElevation = $false; $this.Source = "Microsoft.PowerShell.Crescendo" } PowerShellCustomFunctionAttribute([bool]$rElevation) { $this.RequiresElevation = $rElevation $this.Source = "Microsoft.PowerShell.Crescendo" } } function Initialize-SpeedTest { [PowerShellCustomFunctionAttribute(RequiresElevation=$False)] [CmdletBinding()] param( [Parameter()] [switch]$IPv4Only, [Parameter()] [switch]$IPv6Only, [Parameter()] [switch]$NoDownload, [Parameter()] [switch]$NoUpload, [Parameter()] [switch]$ListServers, [Parameter()] [int]$Server ) BEGIN { $__PARAMETERMAP = @{ IPv4Only = @{ OriginalName = '--ipv4' OriginalPosition = '0' Position = '2147483647' ParameterType = 'switch' ApplyToExecutable = $False NoGap = $False } IPv6Only = @{ OriginalName = '--ipv6' OriginalPosition = '1' Position = '2147483647' ParameterType = 'switch' ApplyToExecutable = $False NoGap = $False } NoDownload = @{ OriginalName = '--no-download' OriginalPosition = '2' Position = '2147483647' ParameterType = 'switch' ApplyToExecutable = $False NoGap = $False } NoUpload = @{ OriginalName = '--no-upload' OriginalPosition = '3' Position = '2147483647' ParameterType = 'switch' ApplyToExecutable = $False NoGap = $False } ListServers = @{ OriginalName = '--list' OriginalPosition = '5' Position = '2147483647' ParameterType = 'switch' ApplyToExecutable = $False NoGap = $False } Server = @{ OriginalName = '--server' OriginalPosition = '6' Position = '2147483647' ParameterType = 'int' ApplyToExecutable = $False NoGap = $False } } $__outputHandlers = @{ Default = @{ StreamOutput = $False; Handler = { $args[0] | ConvertFrom-Json -ErrorAction SilentlyContinue | Add-Member -TypeName SpeedTest -passthru } } } } PROCESS { $__boundParameters = $PSBoundParameters $__defaultValueParameters = $PSCmdlet.MyInvocation.MyCommand.Parameters.Values.Where({$_.Attributes.Where({$_.TypeId.Name -eq "PSDefaultValueAttribute"})}).Name $__defaultValueParameters.Where({ !$__boundParameters["$_"] }).ForEach({$__boundParameters["$_"] = get-variable -value $_}) $__commandArgs = @() $MyInvocation.MyCommand.Parameters.Values.Where({$_.SwitchParameter -and $_.Name -notmatch "Debug|Whatif|Confirm|Verbose" -and ! $__boundParameters[$_.Name]}).ForEach({$__boundParameters[$_.Name] = [switch]::new($false)}) if ($__boundParameters["Debug"]){wait-debugger} $__commandArgs += '--json' foreach ($paramName in $__boundParameters.Keys| Where-Object {!$__PARAMETERMAP[$_].ApplyToExecutable}| Sort-Object {$__PARAMETERMAP[$_].OriginalPosition}) { $value = $__boundParameters[$paramName] $param = $__PARAMETERMAP[$paramName] if ($param) { if ($value -is [switch]) { if ($value.IsPresent) { if ($param.OriginalName) { $__commandArgs += $param.OriginalName } } elseif ($param.DefaultMissingValue) { $__commandArgs += $param.DefaultMissingValue } } elseif ( $param.NoGap ) { $pFmt = "{0}{1}" if($value -match "\s") { $pFmt = "{0}""{1}""" } $__commandArgs += $pFmt -f $param.OriginalName, $value } else { if($param.OriginalName) { $__commandArgs += $param.OriginalName } $__commandArgs += $value | Foreach-Object {$_} } } } $__commandArgs = $__commandArgs | Where-Object {$_ -ne $null} if ($__boundParameters["Debug"]){wait-debugger} if ( $__boundParameters["Verbose"]) { Write-Verbose -Verbose -Message librespeed-cli.exe $__commandArgs | Write-Verbose -Verbose } $__handlerInfo = $__outputHandlers[$PSCmdlet.ParameterSetName] if (! $__handlerInfo ) { $__handlerInfo = $__outputHandlers["Default"] # Guaranteed to be present } $__handler = $__handlerInfo.Handler if ( $PSCmdlet.ShouldProcess("librespeed-cli.exe $__commandArgs")) { # check for the application and throw if it cannot be found if ( -not (Get-Command -ErrorAction Ignore "librespeed-cli.exe")) { throw "Cannot find executable 'librespeed-cli.exe'" } if ( $__handlerInfo.StreamOutput ) { & "librespeed-cli.exe" $__commandArgs | & $__handler } else { $result = & "librespeed-cli.exe" $__commandArgs & $__handler $result } } } # end PROCESS <# .DESCRIPTION Performs an internet speed test .PARAMETER IPv4Only .PARAMETER IPv6Only .PARAMETER NoDownload .PARAMETER NoUpload .PARAMETER ListServers .PARAMETER Server #> } |