private/http/Add-HttpQueryParameter.ps1
<# EXAMPLES $str = "https://www.apteco.de/test/123?abc=def&xyz=uuu" Add-HttpQueryPart -Uri $str -QueryParameter @{name="klj";desc="xzy"} #> # Inspired by https://powershellmagazine.com/2019/06/14/pstip-a-better-way-to-generate-http-query-strings-in-powershell/ function Add-HttpQueryPart { [CmdletBinding()] param ( [Parameter(Mandatory=$true)][String]$Uri ,[Parameter(Mandatory=$true)][Hashtable]$QueryParameter ) # Add System.Web Add-Type -AssemblyName System.Web # Parse existing URI $u = [System.Uri]::new($Uri) # Create a http name value collection from an empty string $nvCollection = [System.Web.HttpUtility]::ParseQueryString( $u.Query ) # Parse uri without query if ( $nvCollection.count -gt 0 ) { $uriWithoutQuery = $u.OriginalString.replace($u.Query, "") } else { $uriWithoutQuery = $u.OriginalString } # Add key/value from input hashtable foreach ($key in $QueryParameter.Keys) { $value = $QueryParameter.$key If ( $value -is [scriptblock] ) { $value = $QueryParameter.$key.InvokeReturnAsIs() } $nvCollection.Add($key, $value) } # Build the uri $uriRequest = [System.UriBuilder]$uriWithoutQuery $uriRequest.Query = $nvCollection.ToString() return $uriRequest.Uri.OriginalString } |