Manipuler un fichier XML en powershell
Bonjour,
Comme j’ai énormément de travail aujourd’hui, j’ai décidé de vous concocter un petit article sur la création d’un fichier XML en powershell et son utilisation future. La plupart du temps les commandes ConvertTo-XML ou Export-CliXML nous renvoit un fichier XML qui ne convient pas à ce que nous souhaitons avoir au niveau du contenu. Il existe évidement au moins une autre méthode qui va permettre de créer un fichier contenant UNIQUEMENT ce que l’on veut dedans.
Pour avoir le ficheir XML il v a d’abord falloir définir le squelette du fichier dans une variable. Dans l’exemple ci dessous, on va créer un objet service qui aura pour propriétés Name & Status.
[powershell]
$template = @’
‘@
[/powershell]
Ensuite de ce template, il va nous falloir générer le fichier XML
[powershell] $template | Out-File “C:tempXMLFile.xml” -encoding UTF8[/powershell]
Et créer l’object XML que l’on va manipuler.
[powershell] $xml = [xml](gc $XMLFile)[/powershell]
Le chargement du fichier XML dans l’object $xml va nous permettre de manipuler chaque champ “Enfant” (child) comme des objets, de les cloner, les supprimer . On va aussi pouvoir aller faire des sélections comme dans un tableaux avec les numéros d’entrées. Chaque niveau, correspond à une propriété enfant de l’object XML. Par exemple, pour créer un nouveau service dans l’objet XML, nous allons pouvoir faire comme ceci.
[powershell] $NewService = (@($xml.System.Service)[0]).Clone() [/powershell]
Une fois le nouveau service créé, on définit les différentes propriétés enfants et on les rajoute.
[powershell]
$Service = $NewService.clone()
[String]$Name = “Test”
[String]$Status = “Running”
$Service.Name = $Name
$Service.Status = $Status
$xml.DocumentElement.AppendChild($Service) > $null
[/powershell]
Ensuite, on peut enlever les éléments vides
[powershell]$xml.System.Service | ? { $_.Name -eq “” } | % { [void]$xml.DocumentElement.RemoveChild($_) } [/powershell]
Et on sauvegarde l’obejt dans le fichier XML
[powershell]$xml.Save(“C:tempXMLFile.xml”)[/powershell]
Maintenant, pour utiliser un fichier XML en tant que source de données, on charge le contenu du fichier XML dans un objet XML et on va stocker le contenu en tant que tableau de valeurs
[powershell]
$xml_First = [xml](gc “C:tempXMLFile.xml”)
[Array]$Services = $xml_First.System.Service
[/powershell]
Voilà, c’est tout pour cette première approche de la mnipulation des XML avec Powershell, il y’a sûrement d’autres méthodes, à vous de voir ce qui vous convient le mieux.