Powershell Invoke-WebRequest returns 对象数组,但处理时好像只有 1 个

Powershell Invoke-WebRequest returns array of objects but processes as if there is only 1

$path = "https://api.statuspage.io/v1/pages/$page_id/$endpoint"
$req  = Invoke-WebRequest -Uri $path -Method GET

此请求 returns 对象数组 (50+)。我可以通过 运行ning a Write-Host $req

看到这个

问题是,当我尝试

foreach($i in $req) {
  Write-Host $i
}

我得到了整个对象。同样,如果我 运行 Write-Host $req.length 我得到 1。给出了什么?

此外,没有办法运行像

$global:res = ConvertFrom-Json $req

因为它已经作为 JSON

返回

如果您的目的是将JSON文本解析为(嵌套)对象[pscustomobject]图表) 无论如何,您可以简单地 使用 Invoke-RestMethod rather than Invoke-WebRequest, because Invoke-RestMethod has ConvertFrom-Json 内置 ,用某种方式来说:

$path = "https://api.statuspage.io/v1/pages/$page_id/$endpoint"

# Retrieves JSON *and* parses it into objects.
$result = Invoke-RestMethod -Uri $path -Method GET

至于你试过的

$req = Invoke-WebRequest ...

Invoke-WebRequest returns 一个 单个 对象,即 BasicHtmlWebResponseObject (PowerShell [Core] v6+) / HtmlWebResponseObject (Windows PowerShell) 的实例,它是一个具有元数据的包装器对象,该元数据存储在 .Content 属性.

中收到的响应的 内容

在您的例子中,.Content 包含 JSON 作为 单个字符串 ConvertFrom-Json 可以解析为嵌套的 对象(s).

要将此 JSON 字符串解析为一个或多个(可能嵌套的)对象([pscustomobject] 图):

$result = ConvertFrom-Json $req.Content

请注意,即使 $result = ConvertFrom-Json $req 也可以工作,因为当响应对象被隐式 字符串化 时,它会插入其 .Content [=71] 的值=].

正如 Theo 在评论中指出的那样,您还可以使用管道:

$result = $req | ConvertFrom-Json