0

我正在尝试在 Powershell 中使用 Invoke-Restmethod 来调用 API(我对此很陌生)。我可以将其发送到 POST 并返回 jwt 访问令牌。我也可以使用该令牌通过 GET 返回一个 id,但是我在下一步返回下一组数据时遇到了麻烦。我可以通过 curl 让它手动工作。我相信这个问题可能是因为返回租户列表需要多个标题,而我不确定格式才能使其正常工作。

curl 脚本如下所示,并按预期工作:

curl -XGET -H "Authorization: Bearer <jwt access token>" -H "ID: <id>" https://theapiurl.com/.......

我在powershell中尝试了多种方法来做到这一点,最近一次如下,但我没有尝试任何工作。我已经尝试返回单独的 $headers 内容并构建一个字符串(即 $headers2 = $.headers.Item(Authorization) + ......),但这也不起作用。老实说,我尝试了很多不同的东西,我忘记了我拥有和没有尝试过的东西

$headers = @{
    'ID' = $id
    'Authorization' = $auth_string
    }
    
$response = Invoke-RestMethod -Method Get -Headers $headers -Uri $url

请让我知道添加多个标题的正确方法(我认为这是问题所在,我做错了什么)?

4

2 回答 2

1

如果它对其他人有用,另一种设置此命令行开关参数的语法如下(上传到 GitHub 发布存储库的实际工作示例)。在参数对象中设置所有开关(不添加连字符)很有用,如下所示:

  $upload_params = @{
    Uri = $upload_uri + "?name=$asset_name"
    Method = 'POST'
    Headers = @{
      'Authorization' = "token $github_token"
      'Accept' = 'application/vnd.github.everest-preview+json'
    }
    InFile = $asset
    ContentType = 'application/octet-stream'
  }
"Uploading $asset..."
$upload = Invoke-RestMethod @upload_params
"The server returned:"
echo $upload

该变量$upload包含从服务器返回的完整对象(从 json 转换为 PowerShell 对象)。因此,例如,您还可以像这样获取此对象的属性:

"Upload successfully posted as " + $upload.url 
于 2021-04-10T06:59:35.407 回答
0

感谢所有回复 - 他们都不是真正的答案,但他们确实给了我信心,我正在以正确的方式做这件事。

我一直在使用 PS Write-Host 检查返回的数据——这适用于令牌和 ID,但不适用于下一步。我没有收到错误,只是没有数据。(在命令提示符窗口中手动测试时,我确实看到了返回的数据)。当我向 PS 添加 -OutFile 并检查文件后,我意识到它一直在工作,而 PS 只是没有向我显示结果。浪费了 2 个小时,虽然结果我学到了更多!

于 2021-03-28T09:47:48.993 回答