Private/New-ArmorApiUriQueryString.ps1
function New-ArmorApiUriQueryString { <# .SYNOPSIS This cmdlet is used to build a valid URI query string. .DESCRIPTION { required: more detailed description of the function's purpose } .INPUTS None- you cannot pipe objects to this cmdlet. .NOTES Troy Lindsay Twitter: @troylindsay42 GitHub: tlindsay42 .EXAMPLE {required: show one or more examples using the function} .LINK http://armorpowershell.readthedocs.io/en/latest/index.html .LINK https://github.com/tlindsay42/ArmorPowerShell .LINK https://docs.armor.com/display/KBSS/Armor+API+Guide .LINK https://developer.armor.com/ #> [CmdletBinding()] [OutputType( [String] )] param ( <# Specifies the query filters available to the endpoint. #> [Parameter( Position = 0 )] [AllowEmptyCollection()] [String[]] $QueryKeys = @(), <# Specifies the parameters available within the calling cmdlet. #> [Parameter( Position = 1 )] [ValidateNotNullOrEmpty()] [String[]] $Parameters = @(), <# Specifies the endpoint's URI. #> [Parameter( Position = 2 )] [ValidateNotNullOrEmpty()] [String] $Uri = '' ) begin { $function = $MyInvocation.MyCommand.Name Write-Verbose -Message ( 'Beginning {0}.' -f $function ) } # End of begin process { [String] $return = $Uri Write-Verbose -Message 'Build the query parameters.' $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 ( $parameter in $Parameters ) { $parameterValue = ( Get-Variable -Name $parameter.Name ).Value <# If the parameter name matches the query option name, build a query string. #> if ( $parameter.Name -eq $query ) { if ( $resources.Query[$parameter.Name] -and $parameterValue ) { $queryString += '{0}={1}' -f $resources.Query[$parameter.Name], $parameterValue } } <# If the parameter alias matches the query option name, build a query string. #> elseif ( $parameter.Aliases -eq $query ) { if ( $resources.Query[$parameter.Aliases] -and $parameterValue ) { $queryString += '{0}={1}' -f $resources.Query[$parameter.Aliases], $parameterValue } } } } <# After all query options are exhausted, build a new URI with all defined query options. #> if ( $queryString.Count -gt 0 ) { $return += '?{0}' -f ( $queryString -join '&' ) Write-Verbose -Message ( 'URI = {0}' -f $return ) } $return } # End of process end { Write-Verbose -Message ( 'Ending {0}.' -f $function ) } # End of end } # End of function |