Powershell Invoke-Restmethod 无法使用生成的 Authtoken 作为变量

mai*_*ght 5 powershell

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

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

因为 API 仅以特殊形式接受 authoken,所以我必须对其进行一些编辑

\n\n
$AuthToken = $AuthToken.Replace("auth_token=",\'"auth_token"="\')\n$AuthToken = $AuthToken.Insert(73,\xe2\x80\x9a"\xe2\x80\x98)\n
Run Code Online (Sandbox Code Playgroud)\n\n

之前的Authtoken

\n\n
@{auth_token=rShln/Yc2cepDtzbNFntdZue:9c3ce025e5485b14090ca25500f15fa2}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的治疗之后

\n\n
@{"auth_token"="St6tecwEseAQegkfhACXUwaj:d7e3e2095ba31073e3fbc043c4563d28"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我手动将 Authtoken 插入 Restmethod 中,调用将如下所示:

\n\n
Invoke-RestMethod -Method Get -ContentType application/json -Headers @{"auth_token"="JsRaTBRlElpq1jLLX5z3TXUy:91d0e1eee1943f6cd6dbaa1d0b9ba9d0"} -Uri "https://path/to/api/something"\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您可能猜到的,这效果非常好!如果我现在尝试使用变量中的 Authtoken,我的休息调用将如下所示:

\n\n
Invoke-RestMethod -Method Get -ContentType application/json -Headers $Authtoken -Uri "https://path/to/api/something"\n
Run Code Online (Sandbox Code Playgroud)\n\n

Powershell 给我以下错误

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

我不知道为什么 i\xc2\xb4am 收到此错误,并且非常感谢有人可以帮助我解决此问题!

\n

The*_*ian 0

所以现在它看起来像是$AuthToken一个字符串。该字符串的格式就像您期望的哈希表一样,但我不认为它实际上是哈希表。解决这个问题的方法是使用Invoke-Expression字符串,这会将其转换为实际的哈希表。就像是:

$AuthToken = Invoke-Expression $AuthToken
Invoke-RestMethod -Method Get -ContentType application/json -Headers $Authtoken -Uri "https://path/to/api/something"
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是你没有发布你的“另一种方法”来解决这个问题。我有完全一样的问题。 (4认同)