从Invoke-WebRequest

时间:2017-03-07 00:37:32

标签: xml powershell

我正在尝试解析我在PowerShell脚本中对Invoke-WebRequest的响应中的特定值,但我无法得到它。

如果我使用邮递员获取内容,我会得到以下内容:

<?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)的格式不同,但我不确定这里的问题是什么。

1 个答案:

答案 0 :(得分:2)

$r.Content是一个字符串。在访问各个节点之前,您需要实际解析其中的XML:

$bn = ([xml]$r.Content).globalInfo.versionInfo.buildNumber