如何将URL字符串拆分/解析为对象?

时间:2018-12-13 16:35:08

标签: string powershell object url

我正在尝试将URL拆分为一个对象。

$url = "https://api.somedomain.com/v2/direct-access/producing-entities-details?entity_id=104194825&format=json&page=1

所需的结果将是

PS C:\WINDOWS\system32> $url.api 
https://api.somedomain.com/v2/direct-access

PS C:\WINDOWS\system32> $url.dataset
producing-entities-details

PS C:\WINDOWS\system32> $url.params
entity_id=104194825&format=json&page=1 

我确定可以与正则表达式结合使用,但是我也想知道是否可以仅使用内置的PowerShell功能来完成。

2 个答案:

答案 0 :(得分:4)

无需弄乱正则表达式。 [uri] type accelerator会为您完成部分工作。其他部分似乎是特定于您选择如何解释数据的,而不是URL解剖的工作原理。

PS C:\Users\matt> $url = [uri]"https://api.somedomain.com/v2/direct-access/producing-entities-details?entity_id=104194825&format=json&page=1"

PS C:\Users\matt> $url.Query
?entity_id=104194825&format=json&page=1

您可以浏览其他属性,并查看它们如何为您提供帮助。例如,您可能需要构建细分以获取所需的其他部分。

PS C:\Users\matt>   $url.Segments
/
v2/
direct-access/
producing-entities-details

答案 1 :(得分:0)

$url = "https://api.somedomain.com/v2/direct-access/producing-entities-details?entity_id=104194825&format=json&page=1"

$uri = [System.Uri]$url

$ParsedQueryString = [System.Web.HttpUtility]::ParseQueryString($uri.Query)

$i = 0
$queryParams = @()
foreach($QueryStringObject in $ParsedQueryString){
    $queryObject = New-Object -TypeName psobject
    $queryObject | Add-Member -MemberType NoteProperty -Name Query -Value $QueryStringObject
    $queryObject | Add-Member -MemberType NoteProperty -Name Value -Value $ParsedQueryString[$i]
    $queryParams += $queryObject
    $i++
}
$queryParams

输出:

Query     Value
-----     -----
entity_id 104194825
format    json
page      1