Le cmdlet PowerShell Export-Csv
et les cmdlets PowerShell Import-Csv
permettent aux administrateurs d’importer des CSV via une boucle foreach, d’utiliser Export-Csv
pour ajouter des CSV et exporter des tableaux vers un fichier CSV et bien plus encore.
Dans cet article, vous apprendrez de nombreux scénarios courants dans lesquels vous pouvez utiliser PowerShell pour gérer des CSV comme suit :
- Lecture de fichiers CSV avec PowerShell
- Enregistrement de fichiers CSV avec PowerShell
- Formatage de la sortie avant d’exécuter
Export-CSV
- Ajout à un CSV
- Ajout de différences à un fichier existant
Export-CSV
et la chaîne#TYPE
Si vous n’êtes pas familier avec le fonctionnement interne des fichiers CSV, ce sont des fichiers texte qui suivent un format standard de séparation de virgules littérales de vos valeurs dans un tableau. Vous pouvez créer un fichier CSV en PowerShell en utilisant le cmdlet Export-Csv
et en redirigeant un ou plusieurs objets vers celui-ci.
La commande ci-dessous trouve les deux premiers processus en cours d’exécution et passe les objets générés au cmdlet Export-Csv
. Le cmdlet Export-Csv
crée ensuite un fichier CSV appelé processes.csv à la racine de votre lecteur système (probablement C:\).
Ouvrez maintenant processes.csv avec le bloc-notes. Vous devriez voir "Nom","SI","Poignées","VM"
en haut comme en-têtes. Vous verrez également #TYPE System.Diagnostics.Process
, ce qui peut ne pas avoir beaucoup de sens pour le moment. Ne vous inquiétez pas, nous couvrirons cette chaîne dans cet article.
Lecture des fichiers CSV avec Import-Csv
Vous voulez plus de conseils comme celui-ci ? Consultez mon blog PowerShell personnel.
PowerShell dispose de quelques commandes qui vous permettent de lire des fichiers texte. Ces commandes sont Get-Content
et Import-Csv
. Chacune de ces deux cmdlets lit techniquement le fichier de la même manière. Mais Import-Csv
va un peu plus loin. Import-Csv
comprend la structure sous-jacente non seulement d’un fichier texte mais aussi d’un fichier CSV.
Étant donné qu’un fichier CSV suit un certain schéma, Import-Csv
comprend le schéma CSV. Cette cmdlet ne lit pas seulement le fichier texte depuis le disque mais convertit également les lignes du fichier CSV en objets PowerShell.
Fichiers non CSV
Généralement, les données d’un CSV sont séparées par des virgules, mais il arrive parfois qu’un CSV (techniquement pas un CSV à ce stade) ait des données séparées par un autre délimiteur. Ces délimiteurs sont parfois une tabulation ou peut-être un point-virgule.
Si vous avez un fichier CSV avec un délimiteur différent, vous pouvez utiliser le paramètre Delimiter
. Ce paramètre indique à Import-Csv
de ne pas rechercher des virgules, ce qu’il fait par défaut, mais une autre valeur.
Par exemple, si vous avez un fichier séparé par des tabulations, vous pouvez lire le fichier comme suit :
Ajout d’en-têtes
A common Import-Csv
parameter is Header
. This parameter lets you specify the property names of the objects created by this cmdlet.
Par défaut, la cmdlet Import-Csv
traitera la première ligne du fichier CSV comme des en-têtes. Elle convertira ensuite ces valeurs en propriétés de chaque ligne (objet). Mais si vous avez un fichier CSV sans ligne d’en-tête, vous pouvez utiliser le paramètre Header
pour en définir un vous-même.
Le paramètre Header
empêche Import-CSV
d’utiliser votre première ligne comme en-tête et vous évite également des tracas en évitant d’ouvrir manuellement le fichier CSV pour ajouter des en-têtes.
Pour démontrer ce comportement, ouvrez le bloc-notes et copiez/collez le texte ci-dessous. Ce texte représentera un ensemble de données avec trois lignes et deux colonnes.
Enregistrez le fichier texte sous test.csv. N’oubliez pas d’activer les extensions de type de fichier ou d’encadrer le nom de fichier avec des guillemets doubles pour éviter de l’enregistrer accidentellement avec une extension de fichier se terminant par .csv.txt!
Maintenant, utilisez Import-CSV
pour lire le fichier CSV récemment créé sans le paramètre Header
et inspectez la sortie.
Remarquez que la première ligne a été utilisée comme les propriétés de l’objet. A
et 1
ne sont pas les « étiquettes » que vous voulez pour les propriétés de l’objet. A
, b
et c
sont des lettres tandis que 1
, 2
et 3
sont des nombres. Vous devez les définir avec le paramètre Header
comme ci-dessous :
Enregistrer les fichiers CSV avec PowerShell
Si vous avez besoin de créer ou d’enregistrer un fichier CSV à partir d’objets PowerShell, vous pouvez également procéder autrement. Alors que la commande Import-Csv
« convertit » un fichier CSV en objets PowerShell, Export-Csv
fait l’inverse. Cette commande « convertit » des objets PowerShell en un fichier CSV.
En enregistrant un fichier CSV avec Export-Csv
, vous pouvez ensuite consulter ou utiliser ultérieurement ces données dans d’autres systèmes.
Par exemple, je peux enregistrer tous les processus en cours sur mon ordinateur en transmettant Get-Process
à la commande Export-Csv
.
La commande Export-Csv
est simple en soi, mais il y a quelques pièges à éviter.
Formatage de la sortie avant d’exécuter Export-CSV
Comme vous l’avez vu précédemment, Export-Csv
, par lui-même, effectue une conversion « brute ». Il n’ajoute aucun formatage de texte enrichi spécial, n’ajoute aucune couleur, etc.
Un des pièges les plus courants est de tenter d’améliorer l’apparence de la sortie avant de l’exporter vers un CSV. Beaucoup d’utilisateurs tenteront de rendre la sortie plus agréable avant de l’exporter vers un CSV. Mais je vais vous montrer que cela peut aggraver les choses.
Vous pouvez ouvrir un fichier CSV dans Microsoft Excel et mettre en italique, en gras, ajouter des couleurs et bien d’autres choses, mais si vous enregistrez le fichier en tant que CSV (plutôt qu’un classeur Excel), tout le formatage sera effacé. Un fichier CSV n’est tout simplement pas assez « intelligent ».
Rappelez-vous que les fichiers CSV ne sont que des fichiers texte simples avec des valeurs délimitées par des virgules (ou parfois des tabulations). Utiliser Import-Csv
puis le diriger vers un cmdlet Format-*
de PowerShell ne fonctionnera pas comme prévu.
Selon la documentation Microsoft Export-Csv : « Ne formatez pas les objets avant de les envoyer au cmdlet Export-CSV
. Si Export-CSV
reçoit des objets formatés, le fichier CSV contiendra les propriétés de format plutôt que les propriétés de l’objet. »
Pourquoi cela ?
Ouvrez une fenêtre PowerShell et créez des données factices. Utilisons l’exemple Get-Process
abordé dans la première section de cet article. Mais cette fois, assignez la sortie à une variable. Ensuite, dirigez ces objets de processus vers le cmdlet Format-Table
.

Format-Table
Vous pouvez voir qu’en utilisant Format-Table
, vous avez maintenant une sortie propre et tabulaire.
Maintenant, enregistrez cette sortie dans une autre variable.
Visualisez maintenant les propriétés sur les valeurs des variables $a
et $b
avec Get-Member
. Ce cmdlet vous aidera à comprendre pourquoi ces deux objets apparemment similaires ne sont pas exportés de la même manière dans un fichier CSV :


Format-Table
‘s many object typesLe résultat direct de Get-Process
est : TypeName: System.Diagnostics.Process
, tandis que le résultat de Format-Table
est complètement différent. Il renvoie de nombreux types différents avec des propriétés variables.
Si vous visualisez $a
et $b
dans la console, la sortie semblerait identique. Ce comportement est dû au système de mise en forme de PowerShell.
Comment cela affecte-t-il la sortie de Export-Csv
?
Export-Csv
lit chaque objet tel quel. Lorsque vous redirigez la sortie vers une cmdlet Format-*
, vous modifiez l’entrée que Export-CSV
reçoit. Cela affecte ensuite la sortie qui est enregistrée dans votre nouveau fichier CSV.
Si vous comptez rediriger la sortie vers la cmdlet Export-Csv
, ne redirigez pas la sortie vers une cmdlet Format-*
.
Rappelez-vous que les CSV se concentrent sur les données, pas sur la mise en forme.
Ajout à un fichier CSV
Parfois, vous pourriez avoir un fichier existant auquel vous voulez ajouter plutôt que d’en créer un entièrement nouveau. Par défaut, Export-Csv
écrasera tout fichier spécifié via le paramètre Path
.
Si vous devez ajouter des données à un CSV, utilisez le paramètre Append
.
Supposons que vous ayez une boucle dans laquelle vous souhaitez sauvegarder chaque objet traité dans un fichier CSV. À chaque itération, vous avez un objet différent que vous aimeriez sauvegarder dans un fichier CSV. Comme vous appelez Export-Csv
de manière répétée, cela écrasera le fichier CSV si vous n’utilisez pas le paramètre Append
. Sans le paramètre Append
, vous n’obtiendrez que le dernier objet, ce qui dans la plupart des cas n’est pas le résultat souhaité.
L’exemple ci-dessous recherche les cinq premiers processus en cours d’exécution. Ensuite, il entre dans une boucle foreach
PowerShell Import-Csv et enregistre les propriétés Name
et ProductVersion
dans le fichier test.csv un par un.
Sans utiliser le paramètre Append
, vous verrez que seul le cinquième processus apparaîtra dans le fichier CSV.
Ajout de Différences à un fichier CSV
Il est possible d’ajouter uniquement les différences de propriété à un fichier CSV existant avec Export-Csv
. Cela signifie que si les colonnes d’une ligne CSV et l’objet à enregistrer sont différents, alors ajoutez-les.
Pour n’ajouter que les différences au fichier CSV, vous devrez utiliser les paramètres Append
et Force
ensemble. Selon la documentation Microsoft « Lorsque les paramètres Force
et Append
sont combinés, les objets contenant des propriétés incompatibles peuvent être écrits dans un fichier CSV. Seules les propriétés qui correspondent sont écrites dans le fichier. Les propriétés incompatibles sont ignorées. »
Pour démontrer, créez un objet avec deux propriétés; Nom
et Âge
.
Créez maintenant un autre objet avec une propriété Nom
et Code postal
.
Chaque objet a des propriétés différentes.
Ensuite, créez un fichier CSV à partir du premier objet, puis tentez d’ajouter le deuxième objet au CSV sans le paramètre Force
. Vous recevrez une erreur.

Export-Csv
without Force
Cependant, si vous utilisez le paramètre Force
, Export-Csv
fonctionnera parfaitement.
Cependant, vous remarquerez que la colonne Code postal
a disparu dans le fichier CSV. Utilisez Force
avec prudence. Il peut ne pas fournir la sortie prévue.
Export-CSV
et la chaîne #TYPE
Par défaut, l’utilisation de Export-CSV
sans paramètres supplémentaires inclura une chaîne #TYPE
en haut de votre fichier CSV. Cette chaîne est ensuite suivie du type d’objet que Export-Csv
a reçu.
La plupart du temps, cette chaîne n’est pas réellement utile lors de la consommation de la sortie. Cette chaîne est uniquement là au cas où vous auriez besoin de maintenir le type d’objet à partir duquel les propriétés et les valeurs ont été extraites.
Pour supprimer cette chaîne, utilisez le paramètre NoTypeInformation
. Ce paramètre supprime cette chaîne du CSV entièrement.
Notez qu’à partir de PowerShell Core, cela n’est plus nécessaire.
Résumé
En utilisant les cmdlets PowerShell Import-CSV
et Export-CSV
, vous pouvez facilement travailler avec des fichiers CSV. Ce sont deux cmdlets utiles que vous devriez utiliser fréquemment lorsque vous manipulez des objets et des fichiers CSV.
Mon espoir est qu’avec les explications et les exemples que j’ai présentés ici, vous pourrez comprendre clairement les situations où vous pouvez tirer parti de ces cmdlets à votre avantage.
Vous voulez plus de conseils comme celui-ci? Consultez mon blog personnel sur PowerShell.