Comment analyser des fichiers XML en utilisant PowerShell

  1. Utiliser Select-Xml pour analyser des fichiers XML avec PowerShell
  2. Utiliser la classe System.Xml.XmlDocument pour analyser des fichiers XML avec PowerShell
  3. Utiliser la classe System.Xml.XmlTextReader pour analyser des fichiers XML avec PowerShell
  4. Conclusion
Comment analyser des fichiers XML en utilisant PowerShell

Le langage de balisage extensible ou format XML est encore largement utilisé aujourd’hui. Les fichiers de configuration, les flux RSS et les fichiers Office ne sont que quelques exemples qui utilisent le format XML.

L’analyse d’XML dans PowerShell est une tâche courante, souvent requise pour des tâches telles que l’extraction de données, la gestion de configuration et l’automatisation. Bien que PowerShell offre plusieurs méthodes pour analyser XML, chaque méthode a ses forces et ses cas d’utilisation.

Dans cet article, nous explorerons trois méthodes pour analyser XML dans PowerShell : utiliser la cmdlet Select-Xml, la classe System.Xml.XmlDocument et la classe System.Xml.XmlTextReader. Nous fournirons des exemples détaillés et des explications pour chaque méthode, mettant en évidence leur syntaxe, leur fonctionnalité et leurs applications pratiques.

Utiliser Select-Xml pour analyser des fichiers XML avec PowerShell

Analyser les éléments XML de PowerShell

Tout d’abord, couvrons l’une des méthodes les plus populaires et les plus simples d’utiliser PowerShell pour analyser XML avec Select-Xml. La commande PowerShell Select-Xml nous permet de fournir un fichier XML ou une chaîne et un filtre XPath pour extraire des informations spécifiques.

Nous avons un fichier XML sur de nombreux PC que nous souhaitons analyser avec PowerShell. Par exemple, chaque machine a un nom, une adresse IP et un élément Include qui peut être utilisé dans un rapport.

Exemple XML :

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

Nous voulons utiliser PowerShell pour analyser ce fichier XML et récupérer les noms des ordinateurs. Pour ce faire, nous pourrions utiliser la commande Select-Xml.

Par exemple, dans le fichier ci-dessus, les noms des ordinateurs apparaissent dans le texte interne (InnerXML) de l’élément Name.

Nous fournirions d’abord le XPath approprié pour trouver les noms des ordinateurs. Seuls les nœuds Name contenus dans les éléments Computer seraient renvoyés en utilisant cette technique XPath.

Exemple de code :

Select-Xml -Path sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }

Nous utilisons Select-Xml pour rechercher dans le fichier XML situé à C:\path\sample.xml des nœuds correspondant à l’expression XPath '/Computers/Computer/Name'. Cette expression XPath indique à PowerShell de sélectionner tous les éléments <Name> à l’intérieur de chaque élément <Computer> sous le nœud racine <Computers>.

Nous utilisons ensuite la cmdlet ForEach-Object pour parcourir les résultats renvoyés par la cmdlet Select-Xml. Dans cette boucle, nous accédons à la propriété InnerXML de chaque nœud correspondant.

Cette propriété contient le contenu du texte interne de l’élément XML, ce qui nous permet d’extraire les données souhaitées.

Sortie :

powershell analyser xml - sortie 1

Analyser les attributs XML de PowerShell

Maintenant, adoptons une nouvelle approche pour localiser les noms des ordinateurs. Au lieu d’être représentés par des éléments XML, les descripteurs d’ordinateurs sont directement exprimés par des attributs XML.

Ci-dessous se trouve un exemple de fichier XML avec des descripteurs d’ordinateurs représentés par des attributs. Nous pouvons maintenant voir chaque descripteur comme un attribut plutôt qu’un élément.

Exemple XML :

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

Puisque chaque descripteur est un attribut, modifiez simplement le XPath pour trouver les éléments Computer. Ensuite, en utilisant une cmdlet ForEach-Object, trouvez la valeur de l’attribut name.

Exemple de code :

Select-Xml -Path sample.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }

Nous utilisons Select-Xml pour rechercher dans le fichier XML situé à C:\path\computers-attr.xml des nœuds correspondant à l’expression XPath '/Computers/Computer'. Cette expression XPath sélectionne tous les éléments <Computer> sous le nœud racine <Computers>.

Nous utilisons ensuite la cmdlet ForEach-Object pour parcourir les résultats ; dans la boucle, nous accédons à la propriété name de chaque nœud correspondant. Cette propriété représente la valeur de l’attribut name de chaque élément <Computer>.

Sortie :

powershell analyser xml - sortie 2

Que nous lisions des éléments ou des attributs, la syntaxe de Select-Xml est encombrante : elle nous oblige à utiliser le paramètre XPath, puis à transmettre le résultat à une boucle, et enfin à chercher les données sous la propriété Node.

Utiliser la classe System.Xml.XmlDocument pour analyser des fichiers XML avec PowerShell

La classe System.Xml.XmlDocument pour analyser XML dans PowerShell offre une solution polyvalente et efficace pour gérer les données XML, en faisant un outil précieux pour diverses tâches d’automatisation, de traitement de données et de gestion de configuration.

Cette méthode implique de créer une instance de la classe XmlDocument, de charger le contenu XML dans l’objet document, puis de naviguer à travers les nœuds du document pour accéder aux données souhaitées.

Exemple de code :

$xmlDocument = New-Object System.Xml.XmlDocument
$xmlDocument.Load("sample.xml")

$computerNodes = $xmlDocument.SelectNodes("//Computer")
foreach ($computerNode in $computerNodes) {
    $name = $computerNode.SelectSingleNode("Name").InnerText
    Write-Output $name
}

Dans cet extrait de code, nous créons une nouvelle instance de la classe System.Xml.XmlDocument en utilisant New-Object. Nous chargeons ensuite le contenu XML depuis le fichier C:\path\computers.xml dans l’objet $xmlDocument en utilisant la méthode Load.

Nous utilisons la méthode SelectNodes pour récupérer tous les éléments <Computer> dans le document XML.

Ensuite, nous parcourons chaque nœud <Computer> en utilisant une boucle foreach. Dans la boucle, nous utilisons SelectSingleNode pour trouver l’élément <Name> à l’intérieur de chaque nœud <Computer> et extraire son texte interne en utilisant la propriété InnerText.

Enfin, nous affichons les noms des ordinateurs en utilisant Write-Output.

Sortie :

powershell analyser xml - sortie 3

Utiliser la classe System.Xml.XmlTextReader pour analyser des fichiers XML avec PowerShell

Analyser XML dans PowerShell en utilisant la classe System.Xml.XmlTextReader offre une méthode simple et efficace en mémoire pour traiter les données XML. Cette classe fournit un flux en avant uniquement, en lecture seule qui analyse les données XML efficacement sans charger l’ensemble du document en mémoire.

En utilisant le XmlTextReader, les scripts PowerShell peuvent extraire efficacement des éléments ou des attributs spécifiques des documents XML, permettant des tâches telles que l’extraction de données, la gestion de configuration et l’automatisation.

Exemple de code :

$xmlFilePath = "sample.xml"
$xmlReader = [System.Xml.XmlTextReader]::new($xmlFilePath)

while ($xmlReader.Read()) {
    if ($xmlReader.NodeType -eq "Element" -and $xmlReader.Name -eq "Name") {
        $name = $xmlReader.ReadString()
        Write-Output $name
    }
}

Dans cet extrait de code, nous spécifions le chemin vers le fichier XML en utilisant la variable $xmlFilePath. Nous créons ensuite une nouvelle instance de la classe System.Xml.XmlTextReader et l’initialisons avec le contenu XML du fichier spécifié par $xmlFilePath.

Nous utilisons une boucle while pour parcourir le contenu XML en utilisant la méthode Read de la classe XmlTextReader. Dans la boucle, nous vérifions si le type de nœud actuel est un élément et si son nom est Name.

Si les deux conditions sont remplies, nous utilisons la méthode ReadString pour extraire le texte interne de l’élément <Name> et l’affichons en utilisant Write-Output.

Sortie :

powershell analyser xml - sortie 4

Conclusion

Analyser XML dans PowerShell est une compétence polyvalente et essentielle pour de nombreuses tâches d’automatisation et de traitement de données. En comprenant les différentes méthodes disponibles, telles que Select-Xml, System.Xml.XmlDocument et System.Xml.XmlTextReader, les utilisateurs de PowerShell peuvent extraire et manipuler efficacement des données à partir de documents XML pour répondre à leurs besoins.

Que ce soit pour analyser des éléments ou des attributs, chaque méthode offre ses avantages, permettant aux scripts PowerShell de gérer efficacement les données XML. En tirant parti de ces techniques d’analyse, les utilisateurs de PowerShell peuvent rationaliser leurs flux de travail et atteindre leurs objectifs d’automatisation plus efficacement.

Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Article connexe - PowerShell XML