从Invoke-WebRequest的响应中解析XML
问题描述:
我试图解析一个响应中的特定值,我在PowerShell脚本中做出了Invoke-WebRequest
,但我无法获取它。从Invoke-WebRequest的响应中解析XML
如果我使用例如邮递员获取内容我会得到如下:
<?xml version="1.0" encoding="UTF-8"?>
<globalInfo>
<currentLoggedInUser>admin</currentLoggedInUser>
<versionInfo>
<majorVersion>6</majorVersion>
<minorVersion>2</minorVersion>
<patchVersion>4</patchVersion>
<buildNumber>4292526</buildNumber> <!-- this is what I need -->
</versionInfo>
</globalInfo>
下面是我使用的脚本中的命令,我得到什么:
$r = Invoke-WebRequest -Uri "$uriP/api/1.0/appliance-management/global/info" -Body $body -Method:Get -Headers $head -ContentType "application/xml" -ErrorAction:Stop -TimeoutSec 60
$bn = ($r.Content.globalInfo.versionInfo.buildNumber)
而且,如果我使用$bn = ($r.Content)
我会得到像下面这样的全部内容:
<?xml version="1.0" encoding="UTF-8"?>
<globalInfo><currentLoggedInUser>admin</currentLoggedInUser><versionInfo><majorVersion>6</majorVersion><minorVersion>2</minorVersion><patchVersion>4</patch
Version><buildNumber>4292526</buildNumber></versionInfo></globalInfo>
我可以看到邮递员的响应格式与仅在PowerShell中使用的邮件格式不同($r.Content
),但我不确定此处存在什么问题。
答
$r.Content
是一个字符串。在访问单个节点之前,您需要实际解析XML:
$bn = ([xml]$r.Content).globalInfo.versionInfo.buildNumber
Ansgar,非常感谢您的帮助。这现在工作正常。 –