2009-11-30 86 views
7

Cuando me conecto a mi HP ILO usando la URL, http://ilo-ip/xmldata?item=All está devolviendo un archivo XML en el siguiente formato.Cómo leer un archivo XML desde la web usando powershell

<?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> 

¿Hay algún comando/script powershell para leer datos XML de la URL web?

Respuesta

14

PowerShell utiliza el XmlDocument marco .Net por lo que se podría llamar el método de carga para cargar el código XML en un objeto XmlDocument así:

#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 

Si buscas más información sobre cómo trabajar con el código XML una vez que se tiene Se ha cargado check out Dr. Tobias Weltner's eBook en PowerShell.com, chapter 14 cubre XML.

+0

Gracias por su respuesta. ¿Cómo leo el código que está cargado? No pude encontrar mucha ayuda en internet. –

+1

el XML se mantendrá en el objeto $ doc para que pueda acceder a él a través de la notación de propiedad. Por ejemplo Write-Host $ doc.RIMP.HSI.SPN Esto escribirá "ProLiant DL385 G1" en la consola. Lo que puede hacer es pipe $ doc a Get-Member para obtener una lista de propiedades, p. $ doc | Get-Member –

+0

Hola Alan, recibí una excepción cuando cargué el xml de las dos maneras que describiste. La excepción es '" El servidor cometió una violación de protocolo. Section = ResponseStatusLine "' –

8

Sure. Puede utilizar el objeto cliente Web .NET XML para descargar desde la web y luego usar el [xml] tipo de interpretar una cadena como XML, así:

$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 
Cuestiones relacionadas