我正在尝试通过Powershell访问RESTAPI。
在登录过程中,将生成一个Authtoken,以后的任何命令都需要它,并且必须将它放入 header 中。到目前为止,没有什么特别的。
当然,我想将生成的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仅接受特殊形式的授权,所以我必须对其进行一些编辑
$AuthToken = $AuthToken.Replace("auth_token=",'"auth_token"="')
$AuthToken = $AuthToken.Insert(73,‚"‘)
之前的Authtoken
@{auth_token=rShln/Yc2cepDtzbNFntdZue:9c3ce025e5485b14090ca25500f15fa2}
在我治疗之后
@{"auth_token"="St6tecwEseAQegkfhACXUwaj:d7e3e2095ba31073e3fbc043c4563d28"}
如果我手动将Authtoken插入Rest方法中,则调用看起来如下:
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
我不知道为什么我会收到此错误,并且非常感谢,有人可以帮我解决这个问题!
最佳答案
所以现在看起来$AuthToken
是一个字符串。字符串的格式设置就像您希望的哈希表一样,但是我认为它实际上不是哈希表。要解决此问题,您可以在字符串上使用Invoke-Expression
,并将其转换为实际的哈希表。就像是:
$AuthToken = Invoke-Expression $AuthToken
Invoke-RestMethod -Method Get -ContentType application/json -Headers $Authtoken -Uri "https://path/to/api/something"