Condividi tramite


Import-Csv

Crea oggetti personalizzati simili a tabelle dagli elementi in un file con valori delimitati da caratteri (CSV).

Sintassi

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>]

Descrizione

Il Import-Csv cmdlet crea oggetti personalizzati simili a tabelle dagli elementi nei file CSV. Ogni colonna del file CSV diventa una proprietà di un oggetto personalizzato e gli elementi contenuti nelle righe diventano i valori delle proprietà. Import-Csv funziona su qualsiasi file CSV, inclusi i file generati dal Export-Csv cmdlet .

È possibile usare i parametri del Import-Csv cmdlet per specificare la riga dell'intestazione di colonna e il delimitatore di elemento oppure direttamente Import-Csv per usare il separatore di elenco per le impostazioni cultura correnti come delimitatore di elemento.

È anche possibile usare i ConvertTo-Csv cmdlet e ConvertFrom-Csv per convertire gli oggetti in stringhe CSV (e indietro). Questi cmdlet sono gli stessi dei Export-CSV cmdlet e Import-Csv , ad eccezione del fatto che non gestiscono i file.

Se una voce di riga di intestazione in un file CSV contiene un valore vuoto o Null, PowerShell inserisce un nome di riga di intestazione predefinito e visualizza un messaggio di avviso.

A partire da PowerShell 6.0, Import-Csv ora supporta il formato di file di log esteso W3C.

Esempio

Esempio 1: Importare oggetti processo

Questo esempio illustra come esportare e quindi importare un file CSV di oggetti processo.

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

Il Get-Process cmdlet invia gli oggetti processo nella pipeline all'oggetto Export-Csv. Il Export-Csv cmdlet converte gli oggetti processo in stringhe CSV e salva le stringhe nel file Processes.csv. Il Import-Csv cmdlet importa le stringhe CSV dal file Processes.csv. Le stringhe vengono salvate nella $P variabile . La $P variabile viene inviata alla pipeline al Get-Member cmdlet che visualizza le proprietà delle stringhe CSV importate. La $P variabile viene inviata alla pipeline al Format-Table cmdlet e visualizza gli oggetti .

Esempio 2: Specificare il delimitatore

In questo esempio viene illustrato come usare il parametro Delimiter del Import-Csv cmdlet .

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

Il Get-Process cmdlet invia gli oggetti processo nella pipeline a Export-Csv. Il Export-Csv cmdlet converte gli oggetti processo in stringhe CSV e salva le stringhe nel file Processes.csv. Il parametro Delimiter viene usato per specificare un delimitatore di due punti. Il Import-Csv cmdlet importa le stringhe CSV dal file Processes.csv. Le stringhe vengono salvate nella $P variabile . Per $P variabile viene inviata la pipeline al Format-Table cmdlet .

Esempio 3: Specificare le impostazioni cultura correnti per il delimitatore

In questo esempio viene illustrato come usare il Import-Csv cmdlet con il parametro UseCulture .

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

Il Get-Culture cmdlet usa le proprietà annidate TextInfo e ListSeparator per ottenere il separatore di elenco predefinito delle impostazioni cultura correnti. Il Get-Process cmdlet invia gli oggetti processo nella pipeline a Export-Csv. Il Export-Csv cmdlet converte gli oggetti processo in stringhe CSV e salva le stringhe nel file Processes.csv. Il parametro UseCulture usa il separatore di elenco predefinito delle impostazioni cultura correnti. Il Import-Csv cmdlet importa le stringhe CSV dal file Processes.csv.

Esempio 4: Modificare i nomi delle proprietà in un oggetto importato

In questo esempio viene illustrato come utilizzare il parametro Header di Import-Csv per modificare i nomi delle proprietà nell'oggetto importato risultante.

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]

Il Start-Job cmdlet avvia un processo in background che esegue Get-Process. Un oggetto processo viene inviato alla pipeline al Export-Csv cmdlet e convertito in una stringa CSV. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni sul tipo dall'output CSV ed è facoltativa in PowerShell v6 e versioni successive. La $Header variabile contiene un'intestazione personalizzata che sostituisce i valori predefiniti seguenti: HasMoreData, JobStateInfo, PSBeginTime, P edizione Standard ndTime e PSJobTypeName. La $A variabile usa il Get-Content cmdlet per ottenere la stringa CSV dal file Jobs.csv. La $A variabile viene usata per rimuovere l'intestazione predefinita dal file. Il Out-File cmdlet salva la nuova versione del file Jobs.csv nella $A variabile . Il Import-Csv cmdlet importa il file Jobs.csv e usa il parametro Header per applicare la $Header variabile. La $J variabile contiene il PSCustomObject importato e visualizza l'oggetto nella console di PowerShell.

Esempio 5: Creare un oggetto personalizzato usando un file CSV

Questo esempio illustra come creare un oggetto personalizzato in PowerShell usando un file 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

Per creare il file Links.csv, usare i valori visualizzati nell'output Get-Content .

Il Get-Content cmdlet visualizza il file Links.csv. Il Import-Csv cmdlet importa il file Links.csv. Il parametro Header specifica i nomi delle proprietà LinkId e TopicTitle. Gli oggetti vengono archiviati nella $A variabile . Il Get-Member cmdlet mostra i nomi delle proprietà del parametro Header . Il Where-Object cmdlet seleziona gli oggetti con la proprietà TopicTitle che include alias.

Esempio 6: Importare un file CSV mancante di un valore

Questo esempio mostra come il Import-Csv cmdlet in PowerShell risponde quando la riga di intestazione in un file CSV include un valore Null o vuoto. Import-Csv sostituisce un nome predefinito per la riga di intestazione mancante che diventa il nome della proprietà dell'oggetto restituito Import-Csv .

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

Per creare il file Projects.csv, usare i valori visualizzati nell'output dell'esempio Get-Content .

Il Get-Content cmdlet visualizza il file Projects.csv. La riga di intestazione manca un valore tra ProjectName e Completed. Il Import-Csv cmdlet importa il file Projects.csv e visualizza un messaggio di avviso perché H1 è un nome di intestazione predefinito. Il (Import-Csv -Path .\Projects.csv).H1 comando ottiene i valori della proprietà H1 e visualizza un avviso.

Parametri

-Delimiter

Specifica il delimitatore che separa i valori delle proprietà in un file CSV. Il valore predefinito è una virgola (,).

Immettere un carattere, ad esempio due punti (:). Per specificare un punto e virgola (;) racchiuderlo tra virgolette singole. Per specificare caratteri speciali di escape, ad esempio tabulazione (`t), racchiuderlo tra virgolette doppie.

Se si specifica un carattere diverso dal delimitatore di stringa effettivo nel file, Import-Csv non è possibile creare gli oggetti dalle stringhe CSV e restituirà le stringhe CSV.

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

-Encoding

Specifica la codifica per il file CSV importato. Il valore predefinito è utf8NoBOM.

I valori accettabili per questo parametro sono i seguenti:

  • ascii: usa la codifica per il set di caratteri ASCII (a 7 bit).
  • bigendianunicode: codifica in formato UTF-16 usando l'ordine dei byte big-endian.
  • bigendianutf32: codifica in formato UTF-32 usando l'ordine dei byte big-endian.
  • oem: usa la codifica predefinita per i programmi MS-DOS e console.
  • unicode: codifica in formato UTF-16 usando l'ordine dei byte little-endian.
  • utf7: codifica in formato UTF-7.
  • utf8: codifica in formato UTF-8.
  • utf8BOM: codifica in formato UTF-8 con byte order mark (BOM)
  • utf8NoBOM: codifica in formato UTF-8 senza byte order mark (BOM)
  • utf32: codifica in formato UTF-32.

A partire da PowerShell 6.2, il parametro Encoding consente anche ID numerici di tabelle codici registrate (ad esempio ) o nomi di stringhe di tabelle codici registrate (ad esempio -Encoding 1251-Encoding "windows-1251"). Per altre informazioni, vedere la documentazione di .NET per Encoding.CodePage.

Nota

UTF-7* non è più consigliato per l'uso. A partire da PowerShell 7.1, viene scritto un avviso se si specifica utf7 per il parametro Encoding .

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

Specifica una riga di intestazioni di colonna alternativa per il file importato. L'intestazione di colonna determina i nomi delle proprietà degli oggetti creati da Import-Csv.

Immettere le intestazioni di colonna come elenco delimitato da caratteri. Non racchiudere la stringa di intestazioni tra virgolette. Racchiudere ogni intestazione di colonna tra virgolette singole.

Se si immettono meno intestazioni di colonna rispetto alle colonne di dati, le colonne di dati rimanenti vengono eliminate. Se si immettono più intestazioni di colonna rispetto alle colonne di dati, le intestazioni di colonna aggiuntive vengono create con colonne di dati vuote.

Quando si usa il parametro Header , eliminare la riga di intestazione originale dal file CSV. In caso contrario, Import-Csv crea un oggetto aggiuntivo dagli elementi nella riga di intestazione.

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

-LiteralPath

Specifica il percorso del file CSV da importare. A differenza di Path, il valore del parametro LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

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

-Path

Specifica il percorso del file CSV da importare. È anche possibile inviare tramite pipe un percorso a Import-Csv.

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

-UseCulture

Usa il separatore di elenco per le impostazioni cultura correnti come delimitatore di elemento. Per trovare il separatore di elenco per le impostazioni cultura, usare il comando seguente: (Get-Culture).TextInfo.ListSeparator.

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

Input

String

È possibile inviare tramite pipe una stringa contenente un percorso a questo cmdlet.

Output

Object

Questo cmdlet restituisce gli oggetti descritti dal contenuto nel file CSV.

Note

PowerShell include gli alias seguenti per Import-Csv:

  • Tutte le piattaforme:
    • ipcsv

Poiché gli oggetti importati sono versioni CSV del tipo di oggetto, non vengono riconosciute e formattate dalle voci di formattazione del tipo di PowerShell che formattano le versioni non CSV del tipo di oggetto.

Il risultato di un Import-Csv comando è una raccolta di stringhe che formano un oggetto personalizzato simile a una tabella. Ogni riga è una stringa separata, pertanto è possibile utilizzare la proprietà Count dell'oggetto per contare le righe della tabella. Le colonne corrispondono alle proprietà dell'oggetto e gli elementi delle righe ai valori delle proprietà.

La riga di intestazioni di colonna determina il numero di colonne e i relativi nomi. I nomi delle colonne corrispondono anche a quelli delle proprietà degli oggetti. La prima riga viene interpretata come intestazioni di colonna, a meno che non si usi il parametro Header per specificare le intestazioni di colonna. Se una riga contiene più valori rispetto alla riga di intestazioni, i valori aggiuntivi vengono ignorati.

Se la riga dell'intestazione di colonna manca un valore o contiene un valore null o vuoto, Import-Csv usa H seguito da un numero per l'intestazione di colonna mancante e il nome della proprietà.

Nel file CSV ogni oggetto è rappresentato da un elenco delimitato da caratteri dei valori delle proprietà dell'oggetto. I valori delle proprietà vengono convertiti in stringhe usando il metodo ToString() dell'oggetto, quindi sono rappresentati dal nome del valore della proprietà. Export-Csv non esporta i metodi dell'oggetto .

Import-Csv supporta anche il formato di log esteso W3C. Le righe che iniziano con # vengono considerate come commenti e ignorate a meno che il commento non inizi con #Fields: e contenga un elenco delimitato di nomi di colonna. In tal caso, il cmdlet usa tali nomi di colonna. Questo è il formato standard per Windows IIS e altri log del server Web. Per altre informazioni, vedere Formato file di log esteso.