[英]Passing Header Auth Bearer token as variable in Powershell Invoke-RestMethod
我有下面的代碼,我試圖在其中捕獲訪問令牌並將其作為變量傳遞給 Bearer 令牌的 Headers 部分,但看起來 $Token.access_token 沒有在標題中被替換,我正在低於錯誤。
任何幫助將不勝感激
Invoke-RestMethod : {"error":"Unauthorized","message":"Failed to create session using the supplied Authorization header"}
At E:\restcurl.ps1:48 char:1
+ Invoke-RestMethod -Uri $Uri -Headers $Headers -Method Post -ContentTy ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
PS E:\>
Do {
$RequestAccessTokenUri = "https://anypoint.mulesoft.com/accounts/api/v2/oauth2/token"
$ClientId = "44b1d81339c74"
$ClientSecret = "c3804f9fc18"
$auth_body = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $auth_body -ContentType 'application/x-www-form-urlencoded'
echo $Token.expires_in
echo $Token.access_token
if ($Token.expires_in -gt 200) { break }
} Until ($Token.expires_in -gt 200)
$path = 'E:\actions-runner\cuments-v1-1.0.2.jar';
$jsonpath='E:\curljson.json'
$Headers = @{
'X-ANYPNT-ENV-ID' = '4af1b64'
'X-ANYPNT-ORG-ID' = 'c659234ad'
'Authorization' = "`"Bearer $Token.access_token`""
}
我可以看到您通過將令牌分配給變量然后將其傳遞給標題來解決您的問題。
在這種情況下,也可以使用 PowerShell 子表達式運算符 $() 。
子表達式運算符描述為:
返回一個或多個語句的結果。 對於單個結果,返回一個標量。 對於多個結果,返回一個數組。 當您想在另一個表達式中使用一個表達式時使用它。 例如,將命令的結果嵌入到字符串表達式中。
這基本上會將您的 Header 代碼從:
$Headers = @{
'X-ANYPNT-ENV-ID' = '4af1b64'
'X-ANYPNT-ORG-ID' = 'c659234ad'
'Authorization' = "`"Bearer $Token.access_token`""
}
至:
$Headers = @{
'X-ANYPNT-ENV-ID' = '4af1b64'
'X-ANYPNT-ORG-ID' = 'c659234ad'
'Authorization' = "`"Bearer $($Token.access_token)`""
}
在子表達式運算符$()中包裝$Token.access_token
會導致 PowerShell 首先對其進行評估,然后將結果對象/字符串返回給調用者。
將令牌分配給變量並將其傳遞給標頭有助於
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.