我需要执行Invoke-Webrequest命令,并使用特定格式的正文将设备添加到产品中。以下是json格式的示例(直接从供应商文档中摘取):
$body_json = '{"datasource": [{
"parentId": "123456789000",
"name": "(name)",
"id": "(value)",
"typeId": 0,
"childEnabled": false,
"childCount": 0,
"childType": 0,
"ipAddress": "(ipAddress)",
"zoneId": 0,
"url": "(url)",
"enabled": false,
"idmId": 123456789000,
"parameters": [{
"key": "(key)",
"value": "(value)"
}]
}]}'
当我尝试以其json表示形式提交时,出现以下错误:
Invoke-WebRequest : 无法将START_ARRAY令牌的实例反序列化为com.vendor.etc.DataSourceDetail。在[来源:java.io.StringReader@22c614; line: 1, column: 1]处
C:\powershell_script_location\ps.ps1:114字符9 + $request = Invoke-WebRequest $url -Method Post -Headers $headers -Body $body_json - ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
问题出在“parameters”的格式上,当省略“parameters”时,请求可以成功提交,但是添加的设备缺少重要的参数细节。
是
Invoke-WebRequest、JavaScriptSerializer
、供应商的代码有问题,还是用户操作有误?如果需要任何澄清,请告诉我。不幸的是,我不知道
com.vendor.etc.DataSourceDetail
实例的样子,因为我正在使用API,没有直接访问权限。
Invoke-WebRequest
切换到Invoke-RestMethod
所带来的差异? - mklement0