2

这里有点像Powershell noob ..

我正在为 Windows Defender ATP 开发 Microsoft 的 API。我需要了解如何从作为 Invoke-RestMethod 输出返回的自定义 powershell 对象中提取特定值。

$webResponse = Invoke-RestMethod  -Method Get -Uri $url -Headers $headers 
Write-Output $webResponse

这会产生以下结果:

@odata.context 值 -------------- ----- https://api.securitycenter.windows.com/api/ $metadata#Machines {@{id=f7749cafd089c66e53g21332ba0b426f6f88c953; computerDnsName=桌面-h2134uc;firstSeen=4/30/19 晚上 10:03:40;lastSeen=19 年 5 月 3 日凌晨 4 点 15 分 17 秒;操作系统平台=Windows10;操作系统版本...</p>

我的问题是 - 如何提取 id、computerDnsName 等的各个字段值。

谢谢!

4

1 回答 1

3
$response = Invoke-WebRequest -Uri www.google.at
$response | Get-Member
TypeName: Microsoft.PowerShell.Commands.HtmlWebResponseObject

Name              MemberType Definition
----              ---------- ----------
...
Headers           Property   System.Collections.Generic.Dictionary[string,string]     Headers {get;}
Images            Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Images {get;}
InputFields       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection InputFields {get;}
Links             Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Links {get;}
ParsedHtml        Property   mshtml.IHTMLDocument2 ParsedHtml {get;}
RawContent        Property   string RawContent {get;set;}
RawContentLength  Property   long RawContentLength {get;}
RawContentStream  Property   System.IO.MemoryStream RawContentStream {get;}
Scripts           Property       Microsoft.PowerShell.Commands.WebCmdletElementCollection Scripts {get;}
StatusCode        Property   int StatusCode {get;}
StatusDescription Property   string StatusDescription {get;}

通过 Get-Member您将知道该对象支持哪些属性。然后您可以在给定对象上调用这些属性:

$response.StatusCode
200

如果要选择多个属性,可以使用Select-Object

 $response | select statuscode, statusdescription

 StatusCode StatusDescription
 ---------- -----------------
   200 OK

当然,您可以将结果存储Select-Object在变量中。

更多或更少相同可以用于Invoke-RestMethod

  Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ | Get-Member

TypeName: System.Xml.XmlElement

Name                 MemberType            Definition
----                 ----------            ----------
...

comments             Property              System.Object[] comments {get;}
creator              Property              System.Xml.XmlElement creator {get;}
description          Property              System.Xml.XmlElement description {get;}
encoded              Property              System.Xml.XmlElement encoded {get;}

...

您可以选择/使用的属性取决于响应正文中返回的格式。在上面的示例中,您有一个 XML 正文,但它也可以是 JSON 或其他内容。

于 2019-05-05T06:13:07.663 回答