Comment lire le contenu d’un fichier CSV avec PowerShell ?


I. Présentation

Dans ce tutoriel, nous allons voir comment manipuler le cmdlet « Import-CSV » pour lire et exploiter le contenu d’un fichier CSV à l’aide de PowerShell.



Lorsque l’on s’intéresse au scripting PowerShell, il n’est pas rare de devoir manipuler un fichier CSV pour récupérer les données qu’il contient et les exploiter dans le script.

L’un des cas les plus courants, c’est l’utilisation d’un fichier CSV qui contient des informations sur le personnel de l’entreprise et que l’on va utiliser pour créer les comptes Active Directory. J’ai déjà traité ce cas à l’occasion de mon cours sur l’administration de l’Active Directory avec PowerShell.

Nous allons apprendre un autre exemple : un fichier CSV avec deux colonnes, la première colonne nommée « DossierSource » et la seconde nommée « DossierDestination« . On peut voir cela comme une matrice de correspondance, avec des données à transférer d’un dossier source vers un dossier destination.

Voici à quoi ressemble mon fichier CSV :

DossierSource;DossierDestination
C:DataCommercial;D:DonneesCommercial
C:DataService-Technique;D:DonneesService-Technique
C:DataDirection;S:Donnees-SensiblesDirection

Voilà le contenu du fichier, un fichier qui est enregistré au format « CSV » (C:TEMPdata.csv) mais je fais comment maintenant pour lire et exploiter le contenu de ce fichier ? C’est ce que nous allons voir.

II. Utilisation de la commande Import-CSV

Pour importer les données du fichier CSV, PowerShell a une commande prête à l’emploi : Import-CSV. Au niveau des paramètres, il y en a 3 qui sont particulièrement intéressant (et surtout indispensable) : -Path pour préciser le chemin vers le fichier CSV, -Delimiter pour préciser le délimiteur de colonne c’est-à-dire le « ; » dans notre cas, et -Encodage pour préciser l’encodage du fichier (si nécessaire).

Import-CSV -Path "C:TEMPdata.csv" -Delimiter ";"

Le contenu du fichier CSV doit s’afficher dans la console. Voici ce que l’on obtient :

PowerShell - Exemple Import-CSV
PowerShell – Exemple Import-CSV

Si vous avez un fichier CSV avec de nombreuses colonnes et que vous souhaitez en importer uniquement quelques-unes, c’est possible ! Pour cela, il faut utiliser le paramètre -Header et spécifier le nom de la ou des colonnes à sélectionner.

Voici un exemple pour sélectionner la colonne DossierSource :

Import-CSV -Path "C:TEMPdata.csv" -Delimiter ";" -Header DossierSource

Une autre manière de faire, même s’il faut préférer la syntaxe ci-dessus (plus performante), c’est d’utiliser Select-Object :

Import-CSV -Path "C:TEMPdata.csv" -Delimiter ";" | Select-Object DossierSource

III. Exploiter le fichier CSV avec PowerShell

Afficher le contenu du fichier CSV dans la console, ce n’est pas très utile… Pour exploiter le contenu du fichier dans un script, il faut commencer par stocker son contenu dans une variable. Par exemple, la variable $CSV :

$CSV = Import-CSV -Path "C:TEMPdata.csv" -Delimiter ";"

Ensuite, si vous affichez le contenu de $CSV, vous devriez voir le contenu de votre fichier CSV.

$CSV

Nous pourrions filtrer le contenu du fichier CSV pour importer seulement certaines lignes. Par exemple, seulement les lignes où le champ « DossierDestination » contient la chaîne « D: » correspondante à notre lecteur D. Pour cela, on va appliquer un filtre avec Where-Object (Where).

$CSV = Import-CSV -Path "C:TEMPdata.csv" -Delimiter ";" | Where{ $_.DossierDestination -like "D:*" }

Cela n’était qu’un exemple, nous allons conserver notre fichier CSV en entier.

Pour parcourir notre fichier CSV ligne par ligne, rien de mieux qu’une boucle foreach. Ce qui donne :

Foreach($Ligne in $CSV){
 <code>
}

A chaque tour de boucle, la variable $Ligne prendra pour valeur la ligne complète du CSV en progressant du début jusqu’à la fin du fichier CSV, en passant par notre variable $CSV.

Ensuite, au sein de la boucle nous allons pouvoir lire la colonne que l’on souhaite. Pour lire la valeur de la colonne « DossierSource« , on utilisera :

$Ligne.DossierSource

Essayez avec cette boucle (aucun risque car on écrit seulement une phrase dans la console) :

Foreach($Ligne in $CSV){
   Write-Host "Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)"
}

Elle va retourner le résultat suivant :

# Selon le modèle :
# Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)
Données transférées de C:DataCommercial vers D:DonneesCommercial
Données transférées de C:DataService-Technique vers D:DonneesService-Technique
Données transférées de C:DataDirection vers S:Donnees-SensiblesDirection

Vous voyez, à chaque tour de boucle les valeurs changent ! Nous parvenons à lire, ligne après ligne, le contenu de $CSV. De quoi nous permettre d’effectuer un véritable traitement : le transfert de nos données d’un dossier vers l’autre.

Pour effectuer réellement le transfert des données du dossier source vers le dossier destination, on va simplement ajouter une ligne basée sur l’utilisation de la commande Move-Item.

Voici le bout de code très basique pour parcourir le fichier CSV et transférer les données :

$CSV = Import-CSV -Path "C:TEMPdata.csv" -Delimiter ";"

Foreach($Ligne in $CSV){

  Write-Host "Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)"
  Move-Item -Path "$($Ligne.DossierSource)*" -Destination "$($Ligne.DossierDestination)"
}

Bien sûr, il faudrait améliorer cette boucle en vérifiant, par exemple, si les chemins source et destination existent (Test-Path), avant de chercher à transférer les données.

Dans un prochain article, nous verrons comment exporter des données au format CSV avec PowerShell.

Source link

Mourad ELGORMA

Fondateur de summarynetworks, passionné des nouvelles technologies et des métiers de Réseautique , Master en réseaux et système de télécommunications. ,j’ai affaire à Pascal, Delphi, Java, MATLAB, php …Connaissance du protocole TCP / IP, des applications Ethernet, des WLAN …Planification, installation et dépannage de problèmes de réseau informatique……Installez, configurez et dépannez les périphériques Cisco IOS. Surveillez les performances du réseau et isolez les défaillances du réseau. VLANs, protocoles de routage (RIPv2, EIGRP, OSPF.)…..Manipuler des systèmes embarqués (matériel et logiciel ex: Beaglebone Black)…Linux (Ubuntu, kali, serveur Mandriva Fedora, …). Microsoft (Windows, Windows Server 2003). ……Paquet tracer, GNS3, VMware Workstation, Virtual Box, Filezilla (client / serveur), EasyPhp, serveur Wamp,Le système de gestion WORDPRESS………Installation des caméras de surveillance ( technologie hikvision DVR………..). ,

Laisser un commentaire