private/core/ConvertFrom-QueryString.ps1
function ConvertFrom-QueryString { <# .SYNOPSIS Convert Query String to object. .DESCRIPTION Converts Query String to object. .PARAMETER InputStrings Value to convert .PARAMETER DecodeParameterNames URL decode parameter names .PARAMETER AsHashtable Converts to hash table object .EXAMPLE PS C:\>ConvertFrom-QueryString '?name=path/file.json&index=10' Convert query string to object. .EXAMPLE PS C:\>'name=path/file.json&index=10' | ConvertFrom-QueryString -AsHashtable Convert query string to hashtable. .INPUTS System.String .LINK https://github.com/jasoth/Utility.PS #> [CmdletBinding(DefaultParameterSetName = 'Default')] [OutputType([psobject], ParameterSetName = 'Default')] [OutputType([hashtable], ParameterSetName = 'AsHashtable')] param ( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)] [string[]] $InputStrings, [switch] $DecodeParameterNames, [Parameter(ParameterSetName = 'AsHashtable')] [switch] $AsHashtable ) process { foreach ($inputString in $InputStrings) { $outputObject = @{ } if ($inputString[0] -eq '?') { $inputString = $inputString.Substring(1) } $queryParameters = $inputString.Split('&') foreach ($queryParameter in $queryParameters) { $key, $value = $queryParameter.Split('=') if ($DecodeParameterNames) { $key = [System.Net.WebUtility]::UrlDecode($key) } $outputObject[$key] = [System.Net.WebUtility]::UrlDecode($value) } if ($AsHashtable) { $outputObject } else { [PSCustomObject]$outputObject } } } } |