Powershell Invoke-Restmethod不能将生成的Authtoken用作变量

时间:2016-02-29 20:28:11

标签: powershell

我试图通过Powershell访问RESTAPI。 在登录过程中,将生成一个Authtoken,并且任何后续命令都需要Authtoken,并且必须将其放入标头中。到目前为止没什么特别的 当然,我想将生成的Authtoken放入变量中以便于处理。但是我不能这样做...... 这是我想要的: 登录并获取Authtoken

$payload = @{"login"="username";"password"="password"}
$AuthToken = Invoke-RestMethod -Method Post -ContentType application/json -Body (ConvertTo-Json $payload) -Uri "https://path/to/api/login"

因为API仅以特殊形式接受authoken,所以我必须稍加编辑

$AuthToken = $AuthToken.Replace("auth_token=",'"auth_token"="')
$AuthToken = $AuthToken.Insert(73,‚"‘)

之前的Authtoken

@{auth_token=rShln/Yc2cepDtzbNFntdZue:9c3ce025e5485b14090ca25500f15fa2}

在我的治疗之后

@{"auth_token"="St6tecwEseAQegkfhACXUwaj:d7e3e2095ba31073e3fbc043c4563d28"}

如果我手动将Authtoken插入Restmethod,则调用会显示:

Invoke-RestMethod -Method Get -ContentType application/json -Headers @{"auth_token"="JsRaTBRlElpq1jLLX5z3TXUy:91d0e1eee1943f6cd6dbaa1d0b9ba9d0"} -Uri "https://path/to/api/something"

你可能会觉得这很有效!如果我现在尝试使用我的变量中的Authtoken,我的Rest Call看起来像这样:

Invoke-RestMethod -Method Get -ContentType application/json -Headers $Authtoken -Uri "https://path/to/api/something"

Powershell给了我以下错误

Invoke-RestMethod : Cannot bind parameter 'Headers'. Cannot convert the "@{"auth_token"="St6tecwEseAQegkfhACXUwaj:d7e3e2095ba31073e3fbc043c4563d28"}" value of type "System.String" to type 
"System.Collections.IDictionary".
At C:\Users\User\Desktop\xxx.ps1:6 char:70
+ ... -Method Get -ContentType application/json -Headers $AuthToken -Uri "h ...
+                                                        ~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-RestMethod], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

我不知道为什么我得到这个错误并且非常感谢我有人可以帮助我这个!

3 个答案:

答案 0 :(得分:0)

所以现在看起来$AuthToken是一个字符串。字符串的格式与您希望Hashtable一样,但我不认为它实际上是一个哈希表。你可以做的就是在字符串上使用Invoke-Expression,然后将它转换为实际的哈希表。类似的东西:

$AuthToken = Invoke-Expression $AuthToken
Invoke-RestMethod -Method Get -ContentType application/json -Headers $Authtoken -Uri "https://path/to/api/something"

答案 1 :(得分:0)

标题应采用System.Collections.IDictionary方法(检查:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.system-collections-idictionary-add?view=netframework-4.8

示例:正在使用api上的center
标头变量应为:$headers = @{"centreon-auth-token" = "$Key"}
密钥仅包含令牌,例如:NWU5ZDY5ODFiNWI2YTYuMzAzNjM3NDI=

答案 2 :(得分:0)

我在使用 airtable api 时遇到了这个问题。 我所做的只是 curl "https://api.airtable.com/v0/app----/Post?maxRecords=3&view=Grid%20view" -H @{"Authorization" = "Bearer Your-Api-here "}

它奏效了

我是这里的新手,我只是在这里发帖,认为它可能对某人有所帮助,我花了几个小时才发现这一点。