2009-11-30 14 views
7

Po połączeniu się z moją usługą HP ILO przy użyciu adresu URL, http://ilo-ip/xmldata?item=All, następuje zwrócenie pliku XML w poniższym formacie.Jak odczytać plik XML z Internetu przy użyciu programu Power Shell

<?xml version="1.0" ?> 
- <RIMP> 
- <HSI> 
    <SPN>ProLiant DL385 G1</SPN> 
    <SBSN>ABCDEFG</SBSN> 
    <UUID>123456789</UUID> 
    </HSI> 
- <MP> 
    <ST>1</ST> 
    <PN>Integrated Lights-Out (iLO)</PN> 
    <FWRI>1.82</FWRI> 
    <HWRI>ASIC: 2</HWRI> 
    <SN>ILOABCDEFG</SN> 
    <UUID>ILO1234545</UUID> 
    </MP> 
    </RIMP> 

Czy istnieje polecenie/skrypt Powerhell do odczytywania danych XML z adresu URL?

Odpowiedz

14

PowerShell wykorzystuje ramy XmlDocument .NET więc można wywołać metodę ładowania, aby załadować xml do obiektu XmlDocument jak ten:

#Option 1  
$doc = New-Object System.Xml.XmlDocument 
$doc.Load("http://ilo-ip/xmldata?item=All") 

#Option 2 
[xml]$doc = (New-Object System.Net.WebClient).DownloadString("http://ilo-ip/xmldata?item=All") 


# Your XML will then be in the $doc and the names of the XML nodes can be used as 
# properties to access the values they hold. This short example shows how you would 
# access the value held in the SPN nodes from your sample XML 
Write-Host $doc.RIMP.HSI.SPN 

Jeśli szukasz więcej informacji na temat pracy z XML raz ma został załadowany, wyewidencjonowanie Dr. Tobias Weltner's eBook na PowerShell.com, chapter 14 obejmuje XML.

+0

Dziękuję za odpowiedź. Jak mogę odczytać załadowany kod? Nie mogłem znaleźć dużej pomocy w Internecie. –

+1

XML będzie przechowywany w obiekcie $ doc, aby można było uzyskać do niego dostęp za pośrednictwem notacji właściwości. Na przykład: Write-Host $ doc.RIMP.HSI.SPN Spowoduje to napisanie "ProLiant DL385 G1" na konsolę. Możesz zrobić pipe $ doc na Get-Member, aby uzyskać listę właściwości, np. $ doc | Get-Member –

+0

Witam Alan, dostałem wyjątek Po załadowaniu xml w obie strony, zgodnie z opisem. Wyjątek stanowi '" Serwer popełnił naruszenie protokołu Sekcja = ResponseStatusLine "' –

8

Pewnie. Możesz użyć obiektu .NET WebClient, aby pobrać XML z Internetu, a następnie użyć typu [xml], aby zinterpretować ciąg znaków jako XML:

$url = "http://blogs.msdn.com/powershell/rss.xml" 
[xml]$xml = (new-object System.Net.WebClient).DownloadString($url) 
$xml.rss.channel | Foreach {$_.item} | 
    Where {[DateTime]$_.pubDate -gt (Get-Date).AddMonths(-1)} | 
    Format-Table Title 
Powiązane problemy