Functions/Data/Convert-HashtableToQueryStringOrdered.ps1

Function Convert-HashtableToQueryStringOrdered
    {
    [cmdletbinding()]
    Param
        (
        # Hashtable input
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [System.Collections.Specialized.OrderedDictionary]
        $hashtable,
        
        # Prepend the ? Mark
        [Parameter(Mandatory=$false)]
        [boolean]
        $eroteme = $true,

        # Encode Key
        [Parameter(Mandatory=$false)]
        [boolean]
        $encodeKey = $false,

        # Encode Val
        [Parameter(Mandatory=$false)]
        [boolean]
        $encodeVal = $false
        )
    Process
        {
        # Split Hashtable into Queries
        $Queries = foreach ($key in $hashtable.keys)
        {
            $sKey = if($encodeKey){$Key | ConvertTo-URLEncoding}else{$Key}
            $sVal = if($encodeVal){$hashtable[$Key] | ConvertTo-URLEncoding}else{$hashtable[$key]}
            "$skey=$sval"
        }

        # Compose Queries into Querystring
        $QueryString = Switch ($eroteme)
            {
            $TRUE {"?"+"$($Queries -join '&')"}
            $FALSE {"$($Queries -join '&')"}
            }

        # Output QueryString
        $QueryString
        }
    }