Private/Test-QueryParam.ps1
function Test-QueryParam($querykeys, $parameters, $uri) { <# .SYNOPSIS Builds a URI with query parameters for an endpoint .DESCRIPTION The Test-QueryParam function is used to build and test a custom query string for supported endpoints. In the event that multiple uris are detected, ID is used to determine the appropriate URI. .PARAMETER querykeys The endpoints query keys as defined in Get-RubrikAPIData .PARAMETER parameters The set of parameters passed within the cmdlets invocation .PARAMETER uri The endpoints URI #> # For functions that can address multiple different endpoints based on the $id value # If there are multiple URIs referenced in the API resources, we know this is true if (($resources.URI).count -ge 2) { Write-Verbose -Message "Multiple URIs detected. Selecting URI based on $id" Switch -Wildcard ($id) { 'Fileset:::*' { Write-Verbose -Message 'Loading Fileset API data' $uri = ('https://' + $Server + $resources.URI.Fileset) -replace '{id}', $id } 'MssqlDatabase:::*' { Write-Verbose -Message 'Loading MSSQL API data' $uri = ('https://' + $Server + $resources.URI.MSSQL) -replace '{id}', $id } 'VirtualMachine:::*' { Write-Verbose -Message 'Loading VMware API data' $uri = ('https://' + $Server + $resources.URI.VMware) -replace '{id}', $id } 'HypervVirtualMachine:::*' { Write-Verbose -Message 'Loading HyperV API data' $uri = ('https://' + $Server + $resources.URI.HyperV) -replace '{id}', $id } 'ManagedVolume:::*' { Write-Verbose -Message 'Loading Managed Volume API data' $uri = ('https://' + $Server + $resources.URI.ManagedVolume) -replace '{id}', $id } 'NutanixVirtualMachine:::*' { Write-Verbose -Message 'Loading Nutanix API data' $uri = ('https://' + $Server + $resources.URI.Nutanix) -replace '{id}', $id } 'VolumeGroup:::*' { Write-Verbose -Message 'Loading VolumeGroup API data' $uri = ('https://' + $Server + $resources.URI.VolumeGroup) -replace '{id}', $id } 'OracleDatabase:::*' { Write-Verbose -Message 'Loading OracleDatabase API data' $uri = ('https://' + $Server + $resources.URI.Oracle) -replace '{id}', $id } 'VcdVapp::*' { Write-Verbose -Message 'Loading vCD API data' $uri = ('https://' + $Server + $resources.URI.VcdVapp) -replace '{id}', $id } default { throw 'The supplied id value has no matching endpoint' } } # This ends the logic statement without running the rest of this private function return $uri } Write-Verbose -Message "Build the query parameters for $(if ($querykeys){$querykeys -join ','}else{'<null>'})" $querystring = @() # Walk through all of the available query options presented by the endpoint # Note: Keys are used to search in case the value changes in the future across different API versions foreach ($query in $querykeys) { # Walk through all of the parameters defined in the function # Both the parameter name and parameter alias are used to match against a query option # It is suggested to make the parameter name "human friendly" and set an alias corresponding to the query option name foreach ($param in $parameters) { # If the parameter name matches the query option name, build a query string if ($param.Name -eq $query) { $querystring += Test-QueryObject -object (Get-Variable -Name $param.Name).Value -location $resources.Query[$param.Name] -params $querystring } # If the parameter alias matches the query option name, build a query string elseif ($param.Aliases -eq $query) { $querystring += Test-QueryObject -object (Get-Variable -Name $param.Name).Value -location $resources.Query[$param.Aliases] -params $querystring } } } # After all query options are exhausted, build a new URI with all defined query options if ($parameters.name -contains 'limit') { $uri = New-QueryString -query $querystring -uri $uri } elseif ($resource.method -ne 'Get') { $uri = New-QueryString -query $querystring -uri $uri } else { $uri = New-QueryString -query $querystring -uri $uri -nolimit $true } Write-Verbose -Message "URI = $uri" return $uri } |