Import-Csv

Crée des objets personnalisés de type table à partir des éléments d’un fichier de valeurs séparées par des caractères (CSV).

Syntax

Import-Csv
      [[-Delimiter] <Char>]
      [-Path] <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [[-Delimiter] <Char>]
      -LiteralPath <String[]>
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      [-Path] <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]
Import-Csv
      -LiteralPath <String[]>
      -UseCulture
      [-Header <String[]>]
      [-Encoding <Encoding>]
      [<CommonParameters>]

Description

L’applet Import-Csv de commande crée des objets personnalisés de type table à partir des éléments dans les fichiers CSV. Chaque colonne du fichier CSV devient une propriété de l'objet personnalisé et les éléments stockés dans les lignes deviennent les valeurs de propriété. Import-Csv fonctionne sur n’importe quel fichier CSV, y compris les fichiers générés par l’applet de Export-Csv commande.

Vous pouvez utiliser les paramètres de l’applet Import-Csv de commande pour spécifier la ligne d’en-tête de colonne et le délimiteur d’élément, ou directement Import-Csv pour utiliser le séparateur de liste pour la culture actuelle comme délimiteur d’élément.

Vous pouvez également utiliser les applets de commande et ConvertFrom-Csv les ConvertTo-Csv applets de commande pour convertir des objets en chaînes CSV (et en arrière). Ces applets de commande sont identiques aux Export-CSV applets de commande et Import-Csv aux applets de commande, sauf qu’elles ne traitent pas de fichiers.

Si une entrée de ligne d’en-tête dans un fichier CSV contient une valeur vide ou null, PowerShell insère un nom de ligne d’en-tête par défaut et affiche un message d’avertissement.

À compter de PowerShell 6.0, Import-Csv prend désormais en charge le format de fichier journal étendu W3C.

Exemples

Exemple 1 : Importer des objets de processus

Cet exemple montre comment exporter, puis importer un fichier CSV d’objets de processus.

Get-Process | Export-Csv -Path .\Processes.csv
$P = Import-Csv -Path .\Processes.csv
$P | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name                       MemberType   Definition
----                       ----------   ----------
Equals                     Method       bool Equals(System.Object obj)
GetHashCode                Method       int GetHashCode()
GetType                    Method       type GetType()
ToString                   Method       string ToString()
BasePriority               NoteProperty string BasePriority=8
Company                    NoteProperty string Company=Microsoft Corporation
...

$P | Format-Table

Name                   SI Handles VM            WS        PM        NPM    Path
----                   -- ------- --            --        --        ---    ----
ApplicationFrameHost   4  407     2199293489152 15884288  15151104  23792  C:\WINDOWS\system32\ApplicationFrameHost.exe
...
wininit                0  157     2199112204288 4591616   1630208   10376
winlogon               4  233     2199125549056 7659520   2826240   10992  C:\WINDOWS\System32\WinLogon.exe
WinStore.App           4  846     873435136     33652736  26607616  55432  C:\Program Files\WindowsApps\Microsoft.WindowsStore_11712.1001.13.0_x64__8weky...
WmiPrvSE               0  201     2199100219392 8830976   3297280   10632  C:\WINDOWS\system32\wbem\wmiprvse.exe
WmiPrvSE               0  407     2199157727232 18509824  12922880  16624  C:\WINDOWS\system32\wbem\wmiprvse.exe
WUDFHost               0  834     2199310204928 51945472  87441408  24984  C:\Windows\System32\WUDFHost.exe

L’applet Get-Process de commande envoie des objets de processus vers le pipeline.Export-Csv L’applet Export-Csv de commande convertit les objets de processus en chaînes CSV et enregistre les chaînes dans le fichier Processes.csv. L’applet Import-Csv de commande importe les chaînes CSV à partir du fichier Processes.csv. Les chaînes sont enregistrées dans la $P variable. La $P variable est envoyée au pipeline à l’applet Get-Member de commande qui affiche les propriétés des chaînes CSV importées. La $P variable est envoyée au pipeline à l’applet Format-Table de commande et affiche les objets.

Exemple 2 : Spécifier le délimiteur

Cet exemple montre comment utiliser le paramètre Délimiteur de l’applet Import-Csv de commande.

Get-Process | Export-Csv -Path .\Processes.csv -Delimiter :
$P = Import-Csv -Path .\Processes.csv -Delimiter :
$P | Format-Table

L’applet Get-Process de commande envoie des objets de processus vers le pipeline vers Export-Csv. L’applet Export-Csv de commande convertit les objets de processus en chaînes CSV et enregistre les chaînes dans le fichier Processes.csv. Le paramètre Délimiteur est utilisé pour spécifier un délimiteur deux-points. L’applet Import-Csv de commande importe les chaînes CSV à partir du fichier Processes.csv. Les chaînes sont enregistrées dans la $P variable. Pour $P la variable, le pipeline est envoyé à l’applet Format-Table de commande.

Exemple 3 : Spécifier la culture actuelle pour le délimiteur

Cet exemple montre comment utiliser l’applet Import-Csv de commande avec le paramètre UseCulture .

(Get-Culture).TextInfo.ListSeparator
Get-Process | Export-Csv -Path .\Processes.csv -UseCulture
Import-Csv -Path .\Processes.csv -UseCulture

L’applet Get-Culture de commande utilise les propriétés imbriquées TextInfo et ListSeparator pour obtenir le séparateur de liste par défaut de la culture actuelle. L’applet Get-Process de commande envoie des objets de processus vers le pipeline vers Export-Csv. L’applet Export-Csv de commande convertit les objets de processus en chaînes CSV et enregistre les chaînes dans le fichier Processes.csv. Le paramètre UseCulture utilise le séparateur de liste par défaut de la culture actuelle. L’applet Import-Csv de commande importe les chaînes CSV à partir du fichier Processes.csv.

Exemple 4 : Modifier les noms de propriétés dans un objet importé

Cet exemple montre comment utiliser le paramètre Header de Import-Csv façon à modifier les noms des propriétés dans l’objet importé résultant.

Start-Job -ScriptBlock { Get-Process } | Export-Csv -Path .\Jobs.csv -NoTypeInformation
$Header = 'State', 'MoreData', 'StatusMessage', 'Location', 'Command', 'StateInfo', 'Finished',
          'InstanceId', 'Id', 'Name', 'ChildJobs', 'BeginTime', 'EndTime', 'JobType', 'Output',
          'Error', 'Progress', 'Verbose', 'Debug', 'Warning', 'Information'
# Delete the default header from file
$A = Get-Content -Path .\Jobs.csv
$A = $A[1..($A.Count - 1)]
$A | Out-File -FilePath .\Jobs.csv
$J = Import-Csv -Path .\Jobs.csv -Header $Header
$J

State         : Running
MoreData      : True
StatusMessage :
Location      : localhost
Command       : Get-Process
StateInfo     : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : a259eb63-6824-4b97-a033-305108ae1c2e
Id            : 1
Name          : Job1
ChildJobs     : System.Collections.Generic.List`1[System.Management.Automation.Job]
BeginTime     : 12/20/2018 18:59:57
EndTime       :
JobType       : BackgroundJob
Output        : System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject]
Error         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord]
Progress      : System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]
Verbose       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.VerboseRecord]
Debug         : System.Management.Automation.PSDataCollection`1[System.Management.Automation.DebugRecord]
Warning       : System.Management.Automation.PSDataCollection`1[System.Management.Automation.WarningRecord]
Information   : System.Management.Automation.PSDataCollection`1[System.Management.Automation.InformationRecord]

L’applet Start-Job de commande démarre un travail en arrière-plan qui s’exécute Get-Process. Un objet de travail est envoyé au pipeline à l’applet Export-Csv de commande et converti en chaîne CSV. Le paramètre NoTypeInformation supprime l’en-tête d’informations de type de la sortie CSV et est facultatif dans PowerShell v6 et versions ultérieures. La $Header variable contient un en-tête personnalisé qui remplace les valeurs par défaut suivantes : HasMoreData, JobStateInfo, PSBeginTime, PSEndTime et PSJobTypeName. La $A variable utilise l’applet Get-Content de commande pour obtenir la chaîne CSV à partir du fichier Jobs.csv. La $A variable est utilisée pour supprimer l’en-tête par défaut du fichier. L’applet Out-File de commande enregistre la nouvelle version du fichier Jobs.csv dans la $A variable. L’applet Import-Csv de commande importe le fichier Jobs.csv et utilise le paramètre Header pour appliquer la $Header variable. La $J variable contient le PSCustomObject importé et affiche l’objet dans la console PowerShell.

Exemple 5 : Créer un objet personnalisé à l’aide d’un fichier CSV

Cet exemple montre comment créer un objet personnalisé dans PowerShell à l’aide d’un fichier CSV.

Get-Content -Path .\Links.csv

113207,about_Aliases
113208,about_Arithmetic_Operators
113209,about_Arrays
113210,about_Assignment_Operators
113212,about_Automatic_Variables
113213,about_Break
113214,about_Command_Precedence
113215,about_Command_Syntax
144309,about_Comment_Based_Help
113216,about_CommonParameters
113217,about_Comparison_Operators
113218,about_Continue
113219,about_Core_Commands
113220,about_Data_Section

$A = Import-Csv -Path .\Links.csv -Header 'LinkID', 'TopicTitle'
$A | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
LinkID      NoteProperty string LinkID=113207
TopicTitle  NoteProperty string TopicTitle=about_Aliases

$A | Where-Object -Property TopicTitle -Like '*alias*'

LinkID TopicTitle
------ ----------
113207 about_Aliases

Pour créer votre fichier Links.csv, utilisez les valeurs affichées dans la Get-Content sortie.

L’applet Get-Content de commande affiche le fichier Links.csv. L’applet Import-Csv de commande importe le fichier Links.csv. Le paramètre Header spécifie les noms de propriétés LinkId et TopicTitle. Les objets sont stockés dans la $A variable. L’applet Get-Member de commande affiche les noms de propriétés du paramètre Header . L’applet Where-Object de commande sélectionne des objets avec la propriété TopicTitle qui inclut l’alias.

Exemple 6 : Importer un fichier CSV manquant une valeur

Cet exemple montre comment l’applet Import-Csv de commande dans PowerShell répond lorsque la ligne d’en-tête d’un fichier CSV inclut une valeur null ou vide. Import-Csv remplace un nom par défaut pour la ligne d’en-tête manquante qui devient le nom de propriété de l’objet qui Import-Csv retourne.

Get-Content -Path .\Projects.csv

ProjectID,ProjectName,,Completed
13,Inventory,Redmond,True
440,,FarEast,True
469,Marketing,Europe,False

Import-Csv -Path .\Projects.csv

WARNING: One or more headers were not specified. Default names starting with "H" have been used in
place of any missing headers.

ProjectID ProjectName H1      Completed
--------- ----------- --      ---------
13        Inventory   Redmond True
440                   FarEast True
469       Marketing   Europe  False

(Import-Csv -Path .\Projects.csv).H1

WARNING: One or more headers were not specified. Default names starting with "H" have been used in
place of any missing headers.
Redmond
FarEast
Europe

Pour créer votre fichier Projects.csv, utilisez les valeurs indiquées dans la sortie de l’exemple Get-Content .

L’applet Get-Content de commande affiche le fichier Projects.csv. La ligne d’en-tête ne contient pas de valeur entre ProjectName et Completed. L’applet Import-Csv de commande importe le fichier Projects.csv et affiche un message d’avertissement, car H1 est un nom d’en-tête par défaut. La (Import-Csv -Path .\Projects.csv).H1 commande obtient les valeurs de propriété H1 et affiche un avertissement.

Paramètres

-Delimiter

Spécifie le délimiteur qui sépare les valeurs de propriété dans le fichier CSV. La valeur par défaut est une virgule (,).

Entrez un caractère, tel qu’un signe deux-points (:). Pour spécifier un point-virgule (;) placez-le entre guillemets simples. Pour spécifier des caractères spéciaux échapés tels que l’onglet (`t), placez-le entre guillemets doubles.

Si vous spécifiez un caractère autre que le délimiteur de chaîne réel dans le fichier, Import-Csv ne pouvez pas créer les objets à partir des chaînes CSV et retourneront les chaînes CSV.

Type:Char
Position:1
Default value:comma (,)
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

Spécifie l’encodage du fichier CSV importé. La valeur par défaut est utf8NoBOM.

Les valeurs acceptables pour ce paramètre sont les suivantes :

  • ascii: utilise l’encodage pour le jeu de caractères ASCII (7 bits).
  • bigendianunicode: encode au format UTF-16 à l’aide de l’ordre d’octet big-endian.
  • bigendianutf32: encode au format UTF-32 à l’aide de l’ordre d’octet big-endian.
  • oem: utilise l’encodage par défaut pour les programmes MS-DOS et console.
  • unicode: encode au format UTF-16 à l’aide de l’ordre d’octet little-endian.
  • utf7: encode au format UTF-7.
  • utf8: encode au format UTF-8.
  • utf8BOM: encode au format UTF-8 avec marque d’ordre d’octet (BOM)
  • utf8NoBOM: encode au format UTF-8 sans marque d’ordre d’octet (BOM)
  • utf32: encode au format UTF-32.

À compter de PowerShell 6.2, le paramètre d’encodage autorise également les ID numériques des pages de codes inscrites (par -Encoding 1251exemple) ou des noms de chaînes de pages de codes inscrites (par exemple -Encoding "windows-1251"). Pour plus d’informations, consultez la documentation .NET pour Encoding.CodePage.

Remarque

UTF-7* n’est plus recommandé à utiliser. À partir de PowerShell 7.1, un avertissement est écrit si vous spécifiez utf7 le paramètre Encodage .

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Header

Spécifie une autre ligne d'en-tête de colonne pour la chaîne importée. L’en-tête de colonne détermine les noms de propriétés des objets créés par Import-Csv.

Entrez les en-têtes de colonne sous la forme d’une liste séparée par des caractères. Ne placez pas la chaîne d'en-tête entre guillemets. Placez chaque en-tête de colonne entre guillemets simples.

Si vous entrez moins d’en-têtes de colonne qu’il y a des colonnes de données, les colonnes de données restantes sont dis carte ed. Si vous entrez plus d’en-têtes de colonnes qu’il y a de colonnes de données, les en-têtes de colonne supplémentaires sont créés avec des colonnes de données vides.

Lorsque vous utilisez le paramètre Header, supprimez la ligne d’en-tête d’origine du fichier CSV. Sinon, Import-Csv crée un objet supplémentaire à partir des éléments de la ligne d’en-tête.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Spécifie le chemin d'accès au fichier CSV à importer. Contrairement à Path, la valeur du paramètre LiteralPath est utilisée exactement comme elle est typée. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme séquences d’échappement.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

Spécifie le chemin d'accès au fichier CSV à importer. Vous pouvez également diriger un chemin vers Import-Csv.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-UseCulture

Utilise le séparateur de liste pour la culture actuelle comme délimiteur d’élément. Pour rechercher le séparateur de liste pour une culture, utilisez la commande suivante : (Get-Culture).TextInfo.ListSeparator.

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Entrées

String

Vous pouvez diriger une chaîne qui contient un chemin d’accès à cette applet de commande.

Sorties

Object

Cette applet de commande retourne les objets décrits par le contenu du fichier CSV.

Notes

PowerShell inclut les alias suivants pour Import-Csv:

  • Toutes les plateformes :
    • ipcsv

Étant donné que les objets importés sont des versions CSV du type d’objet, ils ne sont pas reconnus et mis en forme par les entrées de mise en forme de type PowerShell qui mettez en forme les versions non CSV du type d’objet.

Le résultat d’une Import-Csv commande est une collection de chaînes qui forment un objet personnalisé de type table. Chaque ligne est une chaîne distincte. Vous pouvez donc utiliser la propriété Count de l’objet pour compter les lignes de la table. Les colonnes sont les propriétés de l'objet et les éléments des lignes sont les valeurs de propriété.

La ligne d'en-tête de colonne détermine le nombre de colonnes et les noms de colonne. Les noms de colonne sont également les noms des propriétés des objets. La première ligne est interprétée comme les en-têtes de colonne, sauf si vous utilisez le paramètre Header pour spécifier des en-têtes de colonne. Si une ligne possède plus de valeurs que la ligne d'en-tête, les valeurs supplémentaires sont ignorées.

Si la ligne d’en-tête de colonne manque une valeur ou contient une valeur null ou vide, Import-Csv utilise H suivi d’un nombre pour l’en-tête de colonne et le nom de propriété manquants.

Dans le fichier CSV, chaque objet est représenté par une liste séparée par des caractères des valeurs de propriété de l’objet. Les valeurs de propriété sont converties en chaînes à l’aide de la méthode ToString() de l’objet. Elles sont donc représentées par le nom de la valeur de propriété. Export-Csv n’exporte pas les méthodes de l’objet.

Import-Csv prend également en charge le format de journal étendu W3C. Les lignes commençant # par sont traitées comme des commentaires et ignorées, sauf si le commentaire commence #Fields: par et contient la liste délimitée des noms de colonnes. Dans ce cas, l’applet de commande utilise ces noms de colonnes. Il s’agit du format standard pour Windows IIS et d’autres journaux de serveur web. Pour plus d’informations, consultez Format de fichier journal étendu.