Analizar archivos XML usando PowerShell
El lenguaje de marcado extensible o formato XML todavía se usa ampliamente en la actualidad. Los archivos de configuración, las fuentes RSS y los archivos de Office son solo algunos ejemplos que usan el formato XML.
El uso de Windows PowerShell para analizar archivos XML es un paso esencial en nuestro recorrido por PowerShell. Este artículo discutirá cómo podemos analizar archivos XML usando Windows PowerShell.
Analizar elementos XML de PowerShell
Primero, cubramos una de las formas más populares y fáciles de usar PowerShell para analizar XML con Select-XML
. El comando de PowerShell Select-Xml
nos permite proporcionar un archivo o cadena XML y un filtro XPath
para extraer información específica.
Tenemos un archivo XML en muchas PC que nos gustaría analizar con PowerShell. Por ejemplo, cada máquina tiene un nombre, una dirección IP y un elemento Incluir
que se puede utilizar en un informe.
XML de ejemplo:
<Computers>
<Computer>
<Name>WINPC-01</Name>
<Ip>127.0.0.1</Ip>
<Include>true</Include>
</Computer>
<Computer>
<Name>WINPC-02</Name>
<Ip>192.168.1.105</Ip>
<Include>false</Include>
</Computer>
<Computer>
<Name>WINPC-03</Name>
<Ip>192.168.1.104</Ip>
<Include>true</Include>
</Computer>
</Computers>
Queremos usar PowerShell para analizar este archivo XML y obtener los nombres de las computadoras. Para hacer eso, podríamos usar el comando Select-XML
.
Por ejemplo, en el archivo de arriba, los nombres de las computadoras aparecen en el texto interno (InnerXML
) del elemento “Nombre”.
Primero proporcionaríamos el XPath
apropiado para encontrar los nombres de las computadoras. Solo los nodos Nombre
contenidos en los elementos Equipo
se devolverían utilizando esta técnica XPath
.
Luego, utilizando un bucle ForEach-Object
, llegue a la propiedad Node.InnerXML
en cada elemento Name
para obtener solo el InnerXML
de ese elemento.
Código de ejemplo:
Select-Xml -Path C:\PS\sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }
Analizar atributos XML de PowerShell
Ahora adoptemos un nuevo enfoque para localizar nombres de equipos. En lugar de estar representados por elementos XML, los descriptores informáticos se expresan directamente mediante atributos XML.
A continuación se muestra un archivo XML de ejemplo con descriptores de computadora representados con atributos. Ahora podemos ver cada descriptor como un atributo en lugar de un elemento.
Código de ejemplo:
<Computers>
<Computer name="WINPC-01" ip="127.0.0.1" include="true" />
<Computer name="WINPC-02" ip="192.168.1.104" include="false" />
<Computer name="WINPC-03" ip="192.168.1.105" include="true" />
</Computers>
Dado que cada descriptor es un atributo, modifique el XPath
solo para encontrar los elementos Computer
. Luego, utilizando un cmdlet ForEach-Object
, busque el valor del atributo name
.
Código de ejemplo:
Select-Xml -Path C:\Work\computers-attr.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }
Producción :
WINPC-01
WINPC-02
WINPC-03
Ya sea que estemos leyendo elementos o atributos, la sintaxis de Select-Xml
es engorrosa: nos obliga a usar el parámetro XPath
, luego canalizar el resultado a un bucle y finalmente buscar los datos en la propiedad Nodo
. .
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn