Introduction
La gestion des fichiers et la manipulation de données XML sont des tâches essentielles pour tout administrateur système. Dans cet article, nous allons explorer les possibilités offertes par PowerShell, VBA et Python pour effectuer ces opérations de manière efficace.
Gestion des fichiers et manipulation XML avec PowerShell
Exemple simple
Voici comment créer, supprimer et modifier un fichier texte et un fichier XML en PowerShell.
- Créer un fichier texte :
New-Item -Path "C:\exemple.txt" -ItemType File -Value "Contenu initial"
- Créer un fichier XML :
New-Item -Path "C:\exemple.xml" -ItemType File -Value "<racine><element>Valeur</element></racine>"
- Supprimer un fichier :
Remove-Item -Path "C:\exemple.txt"
- Supprimer une ligne :
(Get-Content -Path "C:\exemple.txt") | Where-Object { $_ -notmatch "contenu à supprimer" } | Set-Content -Path "C:\exemple.txt"
- Modifier un fichier texte (ajouter une ligne) :
Add-Content -Path "C:\exemple.txt" -Value "Nouvelle ligne"
- Modifier une ligne :
(Get-Content -Path "C:\exemple.txt") -replace "ancien contenu", "nouveau contenu" | Set-Content -Path "C:\exemple.txt"
- Modifier un fichier XML (modifier une valeur) :
[xml]$xml = Get-Content -Path "C:\exemple.xml"
$xml.racine.element = "Nouvelle valeur"
$xml.Save("C:\exemple.xml")
Exemple complexe
Problématique : Un administrateur système doit générer un rapport quotidien contenant des informations sur l’espace disque disponible pour chaque lecteur, et enregistrer ces données dans un fichier XML.
# Récupérer les informations sur l'espace disque
$drives = Get-PSDrive -PSProvider FileSystem
# Créer un nouveau document XML
$xml = New-Object System.Xml.XmlDocument
# Créer la racine du document XML
$racine = $xml.CreateElement("Rapport")
$xml.AppendChild($racine)
# Ajouter les informations pour chaque lecteur
foreach ($drive in $drives) {
$lecteur = $xml.CreateElement("Lecteur")
$lecteur.SetAttribute("Nom", $drive.Name)
$lecteur.SetAttribute("EspaceLibre", $drive.Free)
$lecteur.SetAttribute("EspaceTotal", $drive.Used + $drive.Free)
$racine.AppendChild($lecteur)
}
#Exporter
$drives | Export-Clixml drive.xml
#Importer
Import-Clixml .\drive.xml
Explication : Ce script récupère les informations sur l’espace disque pour chaque lecteur à l’aide de la commande Get-PSDrive
. Ensuite, il crée un nouveau document XML, ajoute une racine « Rapport » et, pour chaque lecteur, crée un élément « Lecteur » avec les attributs « Nom », « EspaceLibre » et « EspaceTotal ». Enfin, le document XML est enregistré dans le fichier « C:\rapport.xml ».
Dans le cas où nous avons déjà un fichier XML appelé toto.xml contenant :
<Catalog>
<Book>
<Author>Garghentini, Davide</Author>
<Title>XML Developer's Guide</Title>
<Genre>Computer</Genre>
<Price>44.95</Price>
<PublishDate>2000-10-01</PublishDate>
<Description>An in-depth look at creating applications
with XML.</Description>
</Book>
</Catalog>
Et nous souhaitons l’analyser, nous ferions :
#Lire un fichier XML déjà créer
[xml]$file2xml = Get-content .\toto.xml
#Afficher les éléments possibles de manipulation
$file2xml | gm
#Afficher le niveau 1 du xml
$file2xml.Catalog.Book.Author
#Récuperer plusieurs éléments
Select-Xml -Path C:\tmp\tt.xml -XPath Catalog/Book/Author | % {$_.Node}
#Récuperer un élément
(Select-Xml -Path C:\tmp\tt.xml -XPath Catalog/Book/Author).Node
Gestion des fichiers et manipulation XML avec VBA
Exemple simple
Voici comment créer, supprimer et modifier un fichier texte et un fichier XML en VBA.
- Créer un fichier texte :
Open "C:\exemple.txt" For Output As #1
Print #1, "Contenu initial"
Close #1
- Créer un fichier XML :
Open "C:\exemple.xml" For Output As #1
Print #1, "<racine><element>Valeur</element></racine>"
Close #1
- Supprimer une ligne :
Dim ligne As String
Open "C:\exemple.txt" For Input As #1
Open "C:\exemple_temp.txt" For Output As #2
Do Until EOF(1)
Line Input #1, ligne
If ligne <> "contenu à supprimer" Then
Print #2, ligne
End If
Loop
Close #1
Close #2
Kill "C:\exemple.txt"
Name "C:\exemple_temp.txt" As "C:\exemple.txt"
- Supprimer un fichier :
Kill "C:\exemple.txt"
- Modifier un fichier texte (ajouter une ligne) :
Open "C:\exemple.txt" For Append As #1
Print #1, "Nouvelle ligne"
Close #1
- Modifier un fichier XML (modifier une valeur) :
Dim xml As New MSXML2.DOMDocument60
xml.Load "C:\exemple.xml"
xml.SelectSingleNode("//element").Text = "Nouvelle valeur"
xml.Save "C:\exemple.xml"
- Modifier une ligne :
Dim ligne As String
Dim nouvelleLigne As String
Open "C:\exemple.txt" For Input As #1
Open "C:\exemple_temp.txt" For Output As #2
Do Until EOF(1)
Line Input #1, ligne
If ligne = "ancien contenu" Then
nouvelleLigne = "nouveau contenu"
Else
nouvelleLigne = ligne
End If
Print #2, nouvelleLigne
Loop
Close #1
Close #2
Kill "C:\exemple.txt"
Name "C:\exemple_temp.txt" As "C:\exemple.txt"
Exemple complexe de gestion des fichiers et la manipulation XML
Problématique : Un administrateur système doit extraire des données spécifiques d’un fichier XML contenant des informations sur les employés, et générer un fichier CSV avec ces données.
Sub ExportEmployeesToCSV()
Dim xml As New MSXML2.DOMDocument60
xml.Load "C:\employes.xml"
Dim employes As MSXML2.IXMLDOMNodeList
Set employes = xml.SelectNodes("//Employe")
Open "C:\employes.csv" For Output As #1
Print #1, "Nom,Prénom,Service"
Dim employe As MSXML2.IXMLDOMNode
For Each employe In employes
Dim nom As String
nom = employe.SelectSingleNode("Nom").Text
Dim prenom As String
prenom = employe.SelectSingleNode("Prenom").Text
Dim service As String
service = employe.SelectSingleNode("Service").Text
Print #1, nom & "," & prenom & "," & service
Next employe
Close #1
End Sub
Explication : Cette macro VBA charge le fichier XML « C:\employes.xml », sélectionne tous les nœuds « Employe », puis ouvre un fichier « C:\employes.csv » en écriture. Elle écrit d’abord l’en-tête du fichier CSV, puis, pour chaque nœud « Employe », extrait les valeurs des nœuds « Nom », « Prenom » et « Service », et les écrit dans le fichier CSV. Enfin, le fichier CSV est fermé.
Gestion des fichiers et manipulation XML avec Python
Exemple simple
Voici comment créer, supprimer et modifier un fichier texte et un fichier XML en Python.
- Créer un fichier texte :
with open("exemple.txt", "w") as f:
f.write("Contenu initial")
- Créer un fichier XML :
with open("exemple.xml", "w") as f:
f.write("<racine><element>Valeur</element></racine>")
- Supprimer un fichier :
import os
os.remove("exemple.txt")
- Supprimer une ligne :
with open("exemple.txt", "r") as f:
lignes = f.readlines()
with open("exemple.txt", "w") as f:
for ligne in lignes:
if "contenu à supprimer" not in ligne:
f.write(ligne)
- Modifier un fichier texte (ajouter une ligne) :
with open("exemple.txt", "a") as f:
f.write("\nNouvelle ligne")
Modifier une ligne :
with open("exemple.txt", "r") as f:
lignes = f.readlines()
with open("exemple.txt", "w") as f:
for ligne in lignes:
if "ancien contenu" in ligne:
f.write("nouveau contenu\n")
else:
f.write(ligne)
- Modifier un fichier XML (modifier une valeur) :
import xml.etree.ElementTree as ET
tree = ET.parse("exemple.xml")
root = tree.getroot()
root.find("element").text = "Nouvelle valeur"
tree.write("exemple.xml")
Exemple complexe
Problématique : Un administrateur système doit mettre à jour les informations des utilisateurs dans un fichier XML en fonction des données provenant d’un fichier CSV.

import csv
import xml.etree.ElementTree as ET
# Charger le fichier XML
tree = ET.parse("utilisateurs.xml")
root = tree.getroot()
# Dictionnaire pour stocker les utilisateurs du fichier XML
utilisateurs = {utilisateur.find("nom").text: utilisateur for utilisateur in root.findall("utilisateur")}
# Parcourir le fichier CSV et mettre à jour les informations des utilisateurs
with open("mises_a_jour.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
nom = row["nom"]
if nom in utilisateurs:
utilisateur = utilisateurs[nom]
utilisateur.find("email").text = row["email"]
utilisateur.find("service").text = row["service"]
else:
nouvel_utilisateur = ET.SubElement(root, "utilisateur")
ET.SubElement(nouvel_utilisateur, "nom").text = nom
ET.SubElement(nouvel_utilisateur, "email").text = row["email"]
ET.SubElement(nouvel_utilisateur, "service").text = row["service"]
# Enregistrer les modifications dans le fichier XML
tree.write("utilisateurs_mis_a_jour.xml")
Explication : Ce script Python charge le fichier XML « utilisateurs.xml » et crée un dictionnaire utilisateurs
où les clés sont les noms des utilisateurs et les valeurs sont les éléments XML correspondants. Ensuite, il parcourt le fichier CSV « mises_a_jour.csv » et, pour chaque ligne, vérifie si l’utilisateur existe déjà dans le dictionnaire. Si c’est le cas, il met à jour les informations de l’utilisateur (email et service). Sinon, il crée un nouvel élément « utilisateur » avec les informations fournies. Enfin, les modifications sont enregistrées dans un nouveau fichier XML « utilisateurs_mis_a_jour.xml ».
Ces commandes vous permettent de modifier ou de supprimer une ligne spécifique dans un fichier texte en utilisant PowerShell, VBA ou Python. Assurez-vous de remplacer « C:\exemple.txt » par le chemin de votre fichier, « ancien contenu » par le contenu que vous souhaitez modifier, « nouveau contenu » par le contenu de remplacement, et « contenu à supprimer » par le contenu de la ligne que vous souhaitez supprimer.
Conclusion
La gestion des fichiers et la manipulation XML sont des compétences cruciales pour les administrateurs système. PowerShell, VBA et Python offrent des moyens efficaces pour effectuer ces tâches, que ce soit pour des opérations simples ou des cas d’utilisation plus complexes. En maîtrisant ces outils, vous serez en mesure d’automatiser de nombreux processus et de gagner en productivité dans votre travail quotidien.
Liens internes :
- Introduction à PowerShell pour les administrateurs système
- Automatisation des tâches avec VBA
- Traitement des données avec Python
Lien externe :