2017-03-07 121 views
1

我試圖解析一個響應中的特定值,我在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),但我不確定此處存在什麼問題。

回答

1

$r.Content是一個字符串。在訪問單個節點之前,您需要實際解析XML:

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

Ansgar,非常感謝您的幫助。這現在工作正常。 –