使用JSON主体调用RestMethod



我正在尝试编写一个powershell脚本(powershell 6和7(,以便从带有JSON主体的文本文件中进行REST调用API。这是我的代码:

$uri = 'URI'
$json = Get-Content 'TXT_FILE_WITH_JSON_BODY' | Out-String | ConvertFrom-Json | ConvertTo-Json | %{[regex]::Unescape($_)}
$username = 'USER'
$password = 'PASSWORD'
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
Invoke-RestMethod -Method POST -SkipCertificateCheck -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} $uri -body $json -ContentType "application/json"

我的txt文件:

'{
"apiversion": "3.0",
"process": {
"profileId": "ID",
"jobType": "TYPE",
"origin": "ORIGIN",
"processWhileGrowing": true
},
"jobSource": {
"sources": [
{
"uri": "\\\\10.22.6.250\\share\\test\\TEST01.mov"
}
],
"metadata": [
{
"name": "Description",
"value": "Bla bla bla"
},
{
"name": "title",
"value": "Title"
},
{
"name": "channel",
"value": "SRV1"
},
,
{
"name": "type",
"value": "TYPE01"
},
{
"name": "source",
"value": "SOURCE01"
}
]
}
}
'

然后,当我执行脚本时,我会得到:

PS F:Desktop> .test01.ps1
Invoke-RestMethod: F:Desktoptest01.ps1:6
Line |
6 |  Invoke-RestMethod -Method POST -SkipCertificateCheck -Headers @{Autho …
|  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| {
"status": "HTTP_ERROR",
"message": "SERVER_ERROR",
"message_detail": null
}

我的第一个想法是,我的REST API对txt文件(json主体(开头和结尾的引号响应不好。然而,如果我从txt文件中删除引号,Powershell会说以下内容:

PS C:UsersBrice> F:Desktopjsonconvert.ps1
ConvertFrom-Json : Invalid JSON primitive: .
At F:Desktopjsonconvert.ps1:1 char:63
+ ... nt 'F:Desktop1.txt' | Out-String | ConvertFrom-Json | Conve ...
+                                                  ~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

知道我该怎么解决吗?

通过删除txt文件中的简单引号来解决问题,并将以下内容添加到我的代码ConvertTo Json-Depth 5 中

最新更新