Manipuler les fichiers
Introduction
Dans ce chapitre, nous allons apprendre à manipuler différents types de fichiers avec PowerShell.
Nous verrons comment ouvrir, lire, ajouter, modifier ou supprimer du contenu.
Les formats de fichiers utilisés seront les suivants :
-
Les fichiers texte
-
Les fichiers XML
-
Les fichiers CSV
Encodage de caractères et fichiers
1. Qu’est-ce que l’encodage ?
Lorsqu’une commande ou un script est enregistré, chaque lettre est créée à partir de caractères. Ces caractères sont automatiquement traduits par le système en bits et en octets. Un ordinateur stocke des données binaires, des bits 0 ou 1. Chaque caractère (lettre, ponctuation, espace…) sera associé à un nombre.
L’encodage est la technique qui permettra de traduire du contenu en octets puis de le traduire à nouveau dans le contenu d’origine. Autrement dit, c’est une méthode pour stocker du texte dans un ordinateur.
Avec PowerShell, il est possible de spécifier l’encodage lors de l’ouverture ou l’enregistrement d’un fichier. Il existe différents types d’encodage que nous n’allons pas détailler ici. Chacun utilise une suite d’octets différente.
2. Pourquoi l’encodage ?
L’encodage d’un fichier peut avoir une importance capitale, surtout si des caractères spéciaux sont utilisés.
Si l’encodage n’est pas correct lors de la lecture du fichier, il se peut qu’il soit illisible.
Si vous souhaitez, par exemple, afficher du texte en français avec des accents (à, é, è…), ceux-ci peuvent être mal interprétés...
Manipuler des fichiers texte
1. Gestion des fichiers texte
Pour gérer les fichiers texte, nous utiliserons les cmdlets suivantes :
-
Get-Content
-
Add-Content
-
Set-Content
-
Clear-Content
Celles-ci sont incluses dans le module PowerShell Microsoft.PowerShell.Management.
Il est possible de visualiser cela en utilisant la commande suivante :
(Get-Command Get-Content).dll
(Get-Command Set-Content).dll
(Get-Command Add-Content).dll
(Get-Command Clear-Content).dll
2. Exporter le contenu d’un objet vers un fichier
Le contenu d’un objet peut être facilement exporté dans un fichier texte.
Prenons l’exemple suivant : nous souhaitons récupérer la liste des applications sur un poste (juste le nom des applications).
Utilisez la classe WMI Win32_Product triée sur la propriété Name et associez le résultat dans une variable.
$Applications = Get-WMIObject Win32_Product | Select Name
Davantage d’informations seront disponibles sur l’utilisation de PowerShell et WMI dans le chapitre PowerShell et WMI.
Pour exporter la liste des applications, utilisez la cmdlet Out-File.
Utilisez la bonne pratique de l’aide PowerShell.
Get-Help Out-File
Les paramètres suivants seront les plus utiles :
-
-FilePath : chemin du fichier d’export.
-
-Encoding : encodage du fichier.
-
-Append : permet d’ajouter du contenu à un fichier existant.
L’export de notre liste d’applications se fera donc ainsi :
$Applications | Out-File "C:\ENI\MesApplications.txt"
Ci-dessous le résultat :
Pour n’exporter que le nom sans la colonne Name :
$Applications.name | Out-File "C:\ENI\MesApplications.txt"
La cmdlet Out-File permet également d’exporter une simple chaîne de caractères dans un fichier.
"Bonjour et bienvenue" | Out-File "C:\ENI\Test.txt"
3. Lire le contenu d’un fichier
Pour lire le contenu d’un fichier, nous utiliserons la cmdlet Get-Content.
Celle-ci permettra, comme son nom l’indique, de récupérer le contenu d’un élément. Son utilisation est très simple, il suffira d’ajouter le chemin du fichier pour lequel nous souhaitons obtenir le contenu dans un paramètre -Path.
Cependant, ce paramètre est optionnel, le chemin peut s’ajouter...
Manipuler des fichiers XML
1. Qu’est-ce que le XML ?
XML (eXtensible Markup Language) est ce que l’on appelle un métalangage dit langage de balises.
Une balise correspond à un élément ouvert et fermé.
<Nom>Damien</Nom>
La version utilisée de XML est majoritairement la 1.0. XML est standardisé comme recommandation W3C depuis 1998.
2. Pourquoi utiliser le format XML ?
XML est une méthode permettant de représenter de l’information et peut être utilisé avec tous les langages informatiques.
Un fichier XML peut comporter autant d’informations que souhaité et permettra de faciliter la gestion de vos applications, serveurs, installations…
Nous retrouvons par exemple l’utilisation de XML dans les environnements :
-
MDT (Microsoft Deployment Toolkit)
-
MECM (Microsoft Endpoint Configuration Manager)
En effet, lorsqu’un élément est ajouté dans MDT (application, système d’exploitation, driver), cela ajoute un nouveau nœud dans un fichier XML.
Chaque composant (driver, application, OS) alimente un fichier XML qui sera lu lors de l’installation d’un poste de travail.
Sur MECM, lorsqu’une Task Sequence est créée, cela crée par la même occasion un fichier XML avec toutes les informations de la Task Sequence.
Le fichier XML vous permettra par exemple de permettre à l’utilisateur, technicien ou autre de configurer des paramètres en modifiant des nœuds dans le fichier.
Dans les exemples suivants, nous allons utiliser un fichier XML avec le contenu ci-dessous :
<Applications>
<Application Actif="Oui" Architecture="64">
<Name>Notepad++</Name>
<Version>7.9</Version>
<Sources>D:\Applications\Sources\NP++</Sources>
<InstallCMD>npp.7.9.Installer.exe /S</InstallCMD>
<Langage>FR</Langage>
</Application>
<Application...
Manipuler des fichiers CSV
1. CSV et les délimiteurs
a. Qu’est-ce qu’un délimiteur ?
La gestion des fichiers CSV, export ou import, permet l’utilisation des délimiteurs, également appelés séparateurs.
Deux délimiteurs sont disponibles :
-
virgule (,),
-
point-virgule (;).
Ceux-ci permettant de séparer des colonnes et varient en fonction du poste et de la langue installée.
b. Détecter le délimiteur par défaut sur mon poste
Pour trouver le délimiteur utilisé par défaut sur votre poste, il faut se rendre dans l’emplacement suivant : Panneau de configuration - Région - Paramètres supplémentaires.
Le délimiteur sera affiché dans le champ Séparateur de listes.
c. Détecter le délimiteur utilisé dans un fichier
Éditons le fichier CSV avec Notepad++ afin de voir le délimiteur utilisé.
La première ligne nous montre que le séparateur utilisé est la virgule ",".
Nous allons donc créer un petit bout de code qui nous permettra :
-
de détecter automatiquement le délimiteur (séparateur),
-
d’importer un fichier CSV en utilisant le bon délimiteur.
L’idée est de charger la première ligne pour voir si celle-ci contient un caractère ";" ou ",", à l’aide de la cmdlet Get-Content.
La sélection de la première ligne se fera en utilisant le paramètre -First 1.
$MonCSV = "C:\ENI\MesApplications.csv"
$PremiereLigne = Get-Content $MonCSV | Select -First 1
Nous stockerons ensuite le délimiteur utilisé dans une variable :
$Delimiter = If($PremiereLigne.Split(";").Length -gt 1)
{";"}Else{","};
Ci-dessous le code complet :
$MonCSV = "C:\ENI\MesApplications.csv"
$PremiereLigne = Get-Content $MonCSV | Select -First 1
$Delimiter = If($PremiereLigne.Split(";").Length -gt 1)
{";"}Else{","};
Nous verrons plus tard comment importer un fichier CSV en utilisant...