【问题标题】:Get custom Objects via Rest on PowerShell通过 PowerShell 上的 Rest 获取自定义对象
【发布时间】:2013-10-29 09:20:22
【问题描述】:

我使用 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);

【问题讨论】:

    标签: c# powershell powershell-cmdlet


    【解决方案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 响应(就像请求 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-08
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 2011-10-27
      • 2018-04-19
      相关资源
      最近更新 更多