如何使用PowerShell通过OData服务更新实体?

时间:2014-06-17 20:52:23

标签: powershell odata powershell-v4.0

我试图找出如何使用PowerShell作为客户端进行OData更新。我找到了用于测试的站点services.odata.org:http://services.odata.org/OData/OData.svc/ $ metadata。

我试过这个:

Invoke-RestMethod -Method Put -ContentType 'application/json' `
    -Uri 'http://services.odata.org/V3/(S(k22mmq0ajlv45epd2psyysnd))/OData/OData.svc/Products(0)' `
    -Body ( @{ Description = 'CheesyPeas' } | ConvertTo-Json )

但我回来了

Invoke-RestMethod : <?xml version="1.0" encoding="utf-8"?>
  <m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <m:code />
    <m:message xml:lang="en-US">
      Error processing request stream. Type information must be specified for types that take part in inheritance.
    </m:message>
  </m:error>
At line:1 char:1
+ Invoke-RestMethod -Uri 'http://services.odata.org/V3/(S(k22mmq0ajlv45epd2psyysnd ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

我认为这与导航属性有关。理想情况下,我会测试一个没有导航属性的简单实体,直到我有一个基本的PUT工作,但我找不到。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

如错误所述,您需要指定您在正文中发送的类型。

编写如下代码:

Invoke-RestMethod -Method Put -ContentType 'application/json' `
    -Uri 'http://services.odata.org/V3/(S(k22mmq0ajlv45epd2psyysnd))/OData/OData.svc/Products(0)' `
    -Body ( @{ "odata.type" = 'ODataDemo.Product'; Description = 'CheesyPeas' } | ConvertTo-Json )