Skip to content

Instantly share code, notes, and snippets.

@joshooaj
Forked from steviecoaster/New-QueryString.ps1
Last active November 25, 2024 22:52
Show Gist options
  • Save joshooaj/1f2ca6153b2085a9e028e9860f209c9a to your computer and use it in GitHub Desktop.
Save joshooaj/1f2ca6153b2085a9e028e9860f209c9a to your computer and use it in GitHub Desktop.
Creates a querystring to use with an API call
function New-QueryString {
<#
.SYNOPSIS
Turn a hashtable into a URI querystring
.DESCRIPTION
Turn a hashtable into a URI querystring
.PARAMETER QueryParameter
The hashtable to transform
.EXAMPLE
New-QueryString -QueryParameter @{ Animal = 'Dog'; Breed = 'Labrador'; Name = 'Dilbert'}
.EXAMPLE
New-QueryString -QueryParameter @{ Animal = 'Dog'; Breed = 'Labrador', 'Retriever'; Name = 'Dilbert'}
.EXAMPLE
New-QueryString -QueryParameter ([ordered]@{ Animal = 'Dog'; Breed = 'Labrador', 'Retriever'; Name = 'Dilbert'})
.NOTES
Shamelessly taken from https://powershellmagazine.com/2019/06/14/pstip-a-better-way-to-generate-http-query-strings-in-powershell/
#>
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)]
[System.Collections.IDictionary]
$QueryParameter
)
# Add System.Web
Add-Type -AssemblyName System.Web
# Create a http name value collection from an empty string
$nvCollection = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
foreach ($key in $QueryParameter.Keys) {
if ($QueryParameter[$key].GetType().ImplementedInterfaces.Contains([System.Collections.ICollection])) {
foreach ($record in $QueryParameter[$key]) {
$nvCollection.Add($key, $record)
}
} else {
$nvCollection.Add($key, $QueryParameter.$key)
}
}
return $nvCollection.ToString()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment