PowerShell:调用REST服务并写入主机

时间:2018-10-01 00:23:36

标签: xml rest api powershell post

@Nas对写答案for me here很有帮助,但是很遗憾,我无法查询服务器并将呼叫的XML响应写到终端:

$body = @{
 "UserSessionId"="12345678"
 "OptionalEmail"="MyEmail"
} | ConvertTo-Json

$header = @{
 "Accept"="application/json"
 "connectapitoken"="97fe6ab5b1a640909551e36a071ce9ed"
 "Content-Type"="application/json"
} 

$Url = "http://MyServer/WSVistaWebClient/RESTLoyalty.svc/member/search"

$XMLObject = Invoke-RestMethod -Method 'POST' -Uri $url -Headers $header -Body $body     

Write-Host "First try"
$XMLObject.location     #-> readable

Write-Host "Second try"
$XMLObject.InnerXml    #-> like postman output

Write-Host "Third try"
$XMLObject

enter image description here

不确定为什么我可以打印收到的响应响应的原始XML,但无法格式化。

但是那里的数据流是不忠的

2 个答案:

答案 0 :(得分:1)

看起来您想要获得的属性是LoyaltyXML。

$XMLObject.LoyaltyXML

答案 1 :(得分:1)

ArcSet为您提供了一个简洁的答案,对于您说要尝试引用的节点级别,但是仅供参考,这全都涉及使用PowerShell使用XML进行基本解析。

PS具有XML cmdlet ...

Get-Command -Name '*xml*' | Format-Table -AutoSize

CommandType Name                      Version Source                      
----------- ----                      ------- ------                      
...          
Cmdlet      ConvertTo-Xml             3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet      Convert-XMLtoJSON         5.0.0.1 Sorlov.PowerShell           
Cmdlet      Export-Clixml             3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet      Import-Clixml             3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet      Merge-XMLFile             5.0.0.1 Sorlov.PowerShell           
Cmdlet      New-XSDfromXML            5.0.0.1 Sorlov.PowerShell           
Cmdlet      Select-Xml                3.1.0.0 Microsoft.PowerShell.Utility

...专门用于此操作,或者您可以使用.NET xml名称空间对其进行解析。关于此主题,有大量的文档,电子书和视频。 XML和JSON在PS中非常重要。

PowerShell Simply Put: Parsing Through XML

Mastering everyday XML tasks in PowerShell

例如,使用.Net xml名称空间,更改此内容...

$XMLObject = Invoke-RestMethod -Method 'POST' -Uri $url -Headers $header -Body $body

...这样说...

[xml]$XMLObject = Invoke-RestMethod -Method 'POST' -Uri $url -Headers $header -Body $body 

...然后根据需要进行解析。

$XMLObject.Object

例如(由于我无法使用您实际拥有的东西):

# download currency exchange rates in XML format and parse for currency rates:

$url = 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'
[xml]$result = (Invoke-WebRequest -Uri $url -UseBasicParsing).Content

$result

xml                            Envelope
---                            --------
version="1.0" encoding="UTF-8" Envelope


$result.Envelope

gesmes  : http://www.gesmes.org/xml/2002-08-01
xmlns   : http://www.ecb.int/vocabulary/2002-08-01/eurofxref
subject : Reference rates
Sender  : Sender
Cube    : Cube


$result.Envelope.Cube

Cube
----
Cube


$result.Envelope.Cube.Cube

time       Cube                                                                                                                                                                                      
----       ----                                                                                                                                                                                      
2018-09-28 {Cube, Cube, ...



$result.Envelope.Cube.Cube.Cube

currency rate    
-------- ----    
USD      1.1576  
JPY      131.23  
BGN      1.9558  
...