2

我使用 Powershell 版本 3,并且我想通过 Rest 将 uri 上的数据作为对象获取。我使用了 CmdLedt Invoke-RestMehtod:

 Invoke-RestMethod services.odata.org/OData/OData.svc/Advertisements?$format=json

我的输出是:

id       : http://services.odata.org/OData/OData.svc/Advertisements(guid'f89dee73-a
       f9f-4cd4-b330-db93c25ff3c7')
category : category
link     : {link, link, link}
title    : 
updated  : 2013-10-29T09:06:33Z
author   : author
content  : content

但我想要一个输出,其中 ID、名称、Airdate 是一个像这样的对象(2 个对象):

Id                                      Name                                    Airdate
--                                      ----                                    -------
f89dee73-af9f-4cd4-b330-db93c25ff3c7    Old School Lemonade Store, Retro Style  2012-11-07T00:00:00
db2d2186-1c29-4d1e-88ef-a127f521b9c6    Early morning start, need coffee        2000-02-29T00:00:00

有人可以解释我如何通过从返回 JSON 的 URI 中休息一个服装对象来使用 CmdLedt 吗?

后来我必须在 C# 代码中使用它来从 URI 中获取动态对象,并且它们的结构总是不同的。因此我需要这个 CmdLet,因为它通常会生成动态对象。到目前为止,在 C# 中我的代码:

 var args = new string[] { "http://services.odata.org/OData/OData.svc/?$format=json" };
 var command = string.Format("Invoke-RestMethod {0}", args[0]);

 var results = InvokeCommand.InvokeScript(command);
4

1 回答 1

1

我使用Fiddler来比较来自 PowerShell 的请求和来自浏览器的请求。

// PowerShell
GET /OData/OData.svc/Advertisements?=json HTTP/1.1
// Browser
GET /OData/OData.svc/Advertisements?$format=json HTTP/1.1

如您所见,$format从 URL 中删除了 并且您将得到atom+xml响应(就像 requesting 一样http://services.odata.org/OData/OData.svc/Advertisements,因此没有任何 URL 参数):

Content-Type: application/atom+xml;type=feed;charset=utf-8

为了解决问题,您需要在$使用 PowerShell 时进行转义。

试试这个:

$obj = Invoke-RestMethod -uri "http://services.odata.org/OData/OData.svc/Advertisements?`$format=json"
$obj.value

输出(如您所料):

ID                                      Name                                    AirDate
--                                      ----                                    -------
f89dee73-af9f-4cd4-b330-db93c25ff3c7    Old School Lemonade Store, Retro Style  2012-11-07T00:00:00
db2d2186-1c29-4d1e-88ef-a127f521b9c6    Early morning start, need coffee        2000-02-29T00:00:00
于 2013-10-29T10:32:37.517 回答