powershell

How can i get parameters from a query string starting at a certain position in powershell?


I have a query string like the following:

https://www.shoes.com/men-shoes/sneakers/?cgid=men-shoes- 
sneakers&prefn1=refinementColor&prefv1=White&detail=acme&id=12345

I want to get everything from &prefn1 to the end of the string , so the result will be

&prefn1=refinementColor&prefv1=White&detail=acme&id=12345

How can i do this in Powershell ?


Solution

  • A replace pattern like ^[^&]+ should probably do the trick:

    $uri = 'https://www.shoes.com/men-shoes/sneakers/?cgid=men-shoes-sneakers&prefn1=refinementColor&prefv1=White&detail=acme&id=12345'
    $uri -replace '^[^&]+'
    

    However if you want something more robust, you can convert your string into an Uri object and from there you can extract the query from the .Query property and use ParseQueryString string to get a Name / Value collection:

    Add-Type -AssemblyName System.Web
    $uri = [uri] 'https://www.shoes.com/men-shoes/sneakers/?cgid=men-shoes-sneakers&prefn1=refinementColor&prefv1=White&detail=acme&id=12345'
    $query = [System.Web.HttpUtility]::ParseQueryString($uri.Query)
    $query.AllKeys | ForEach-Object {
        [pscustomobject]@{
            Key   = $_
            Value = $query[$_]
        }
    }