Import-Csv
Crea oggetti personalizzati simili a tabelle dagli elementi in un file con valori delimitati da virgole (CSV).
Sintassi
Delimiter (Impostazione predefinita)
Import-Csv
[[-Path] <string[]>]
[[-Delimiter] <char>]
[-LiteralPath <string[]>]
[-Header <string[]>]
[-Encoding <string>]
[<CommonParameters>]
UseCulture
Import-Csv
[[-Path] <string[]>]
-UseCulture
[-LiteralPath <string[]>]
[-Header <string[]>]
[-Encoding <string>]
[<CommonParameters>]
Descrizione
Il cmdlet Import-Csv crea oggetti personalizzati simili a tabelle dagli elementi nei file CSV. Ogni colonna nel file CSV diventa una proprietà dell'oggetto personalizzato e gli elementi nelle righe diventano i valori delle proprietà.
Import-Csv funziona su qualsiasi file CSV, inclusi i file generati dal cmdlet Export-Csv.
È possibile utilizzare i parametri del cmdlet Import-Csv per specificare la riga dell'intestazione di colonna e il delimitatore di elemento oppure dirigere Import-Csv a usare il separatore di elenco della cultura corrente come delimitatore di elemento.
È anche possibile usare i cmdlet ConvertTo-Csv e ConvertFrom-Csv per convertire gli oggetti in stringhe CSV (e indietro). Questi cmdlet sono uguali ai Export-CSV cmdlet and Import-Csv , ad eccezione del fatto che non gestiscono i file.
Se una voce dell'intestazione di un file CSV contiene un valore vuoto o null, PowerShell inserisce un nome predefinito per l'intestazione e visualizza un messaggio di avviso.
Import-Csv usa il byte order-mark (BOM) per rilevare il formato di codifica del file. Se il file non ha bom, presuppone che la codifica sia UTF8.
Esempio
Esempio 1: Importare oggetti del 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 cmdlet Get-Process invia oggetti di processo nella pipeline al Export-Csv. Il cmdlet Export-Csv converte gli oggetti processo in stringhe CSV e salva le stringhe nel file Processes.csv. Il cmdlet Import-Csv importa le stringhe CSV dal file Processes.csv.
Le stringhe vengono salvate nella variabile $P. La variabile $P viene inviata attraverso la pipeline al cmdlet Get-Member, che visualizza le proprietà delle stringhe CSV importate. La variabile $P viene inviata alla pipeline al cmdlet Format-Table, che visualizza gli oggetti.
Esempio 2: Specificare il delimitatore
In questo esempio viene illustrato come usare il parametro delimitatore del cmdlet Import-Csv.
Get-Process | Export-Csv -Path .\Processes.csv -Delimiter :
$P = Import-Csv -Path .\Processes.csv -Delimiter :
$P | Format-Table
Il cmdlet Get-Process invia gli oggetti di processo nella pipeline a Export-Csv. Il cmdlet Export-Csv converte gli oggetti processo in stringhe CSV e salva le stringhe nel file Processes.csv.
Il parametro delimitatore viene usato per specificare un delimitatore di due punti. Il cmdlet Import-Csv importa le stringhe CSV dal file Processes.csv. Le stringhe vengono salvate nella variabile $P. La variabile $P viene inviata lungo la pipeline al cmdlet Format-Table.
Esempio 3: Specificare la cultura attuale per il delimitatore
In questo esempio viene illustrato come usare il cmdlet
(Get-Culture).TextInfo.ListSeparator
Get-Process | Export-Csv -Path .\Processes.csv -UseCulture
Import-Csv -Path .\Processes.csv -UseCulture
Il cmdlet Get-Culture usa le proprietà annidate TextInfo e ListSeparator per ottenere il separatore di elenco predefinito della cultura corrente. Il cmdlet Get-Process invia gli oggetti di processo nella pipeline a Export-Csv. Il cmdlet Export-Csv converte gli oggetti processo in stringhe CSV e salva le stringhe nel file Processes.csv. Il parametro UseCulture usa il separatore di elenco predefinito della cultura corrente. Il cmdlet Import-Csv 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
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 cmdlet Start-Job avvia un processo in background che esegue Get-Process. Un oggetto di lavoro viene inviato alla pipeline al cmdlet Export-Csv e quindi convertito in una stringa CSV. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni sul tipo dall'output CSV ed è facoltativo in PowerShell Core.
La variabile $Header contiene un'intestazione personalizzata che sostituisce i valori predefiniti seguenti: HasMoreData, JobStateInfo, PSBeginTime, PSEndTimee PSJobTypeName. La variabile $A usa il cmdlet Get-Content per ottenere la stringa CSV dal file Jobs.csv. La variabile $A viene usata per rimuovere l'intestazione predefinita dal file. Il cmdlet Out-File salva la nuova versione del file Jobs.csv nella variabile $A. Il cmdlet Import-Csv importa il file Jobs.csv e usa il parametro Header per applicare la variabile $Header. La variabile $J 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 cmdlet Get-Content visualizza il file Links.csv. Il cmdlet Import-Csv importa il file Links.csv. Il parametro Header specifica i nomi delle proprietà LinkId e TopicTitle. Gli oggetti vengono archiviati nella variabile $A. Il cmdlet Where-Object seleziona gli oggetti con la proprietà TopicTitle che include alias.
Esempio 6: Importazione di un file CSV in cui manca un valore
Questo esempio mostra come il cmdlet Import-Csv 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 da 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, utilizza i valori mostrati nell'output dell'esempio Get-Content .
Il Get-Content cmdlet visualizza il file Projects.csv. La riga di intestazione manca un valore tra NomeProgetto e Completato. 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à nel file CSV. Il valore predefinito è una virgola (,).
Immettere un carattere, ad esempio i due punti (:). Per specificare un punto e virgola (;) racchiuderlo tra virgolette singole.
Se si specifica un carattere diverso dal delimitatore di stringa effettivo nel file, Import-Csv non è possibile creare gli oggetti dalle stringhe CSV e verranno restituite le stringhe CSV.
Proprietà dei parametri
| Tipo: | Char |
| Valore predefinito: | comma (,) |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Delimiter
| Posizione: | 1 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Encoding
Specifica il tipo di codifica per il file di destinazione. Il valore predefinito è Default.
I valori accettabili per questo parametro sono i seguenti:
- ASCII Utilizza il set di caratteri ASCII (7 bit).
- BigEndianUnicode Utilizza UTF-16 con l'ordine dei byte big-endian.
- Default Utilizza la codifica che corrisponde alla tabella codici attiva del sistema (in genere ANSI).
- OEM Utilizza la codifica che corrisponde alla tabella codici OEM corrente del sistema.
- Unicode Utilizza UTF-16 con l'ordine dei byte little-endian.
- UTF7 Utilizza UTF-7.
- UTF8 Utilizza UTF-8.
- UTF32 Utilizza UTF-32 con l'ordine dei byte little-endian.
Proprietà dei parametri
| Tipo: | Encoding |
| Valore predefinito: | Default |
| Valori accettati: | ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Header
Specifica una riga di intestazione di colonna alternativa per il file importato. I nomi delle proprietà degli oggetti creati da Import-Csvsono stabiliti dall'intestazione di colonna.
Immettere le intestazioni di colonna come elenco separato da virgole. Non racchiudere la stringa di intestazione 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 utilizza il parametro Header, eliminare la riga di intestazione originale dal file CSV. In caso contrario, Import-Csv crea un oggetto aggiuntivo dagli elementi della riga di intestazione.
Proprietà dei parametri
| Tipo: | String[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-LiteralPath
Specifica il percorso del file CSV da importare. A differenza di Path, il valore del parametro LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come metacaratteri. Se il percorso include caratteri di escape, racchiudilo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.
Proprietà dei parametri
| Tipo: | String[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | PSPath |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | True |
| Valore dagli argomenti rimanenti: | False |
-Path
Specifica il percorso del file CSV da importare.
È anche possibile reindirizzare un percorso a Import-Csv.
Proprietà dei parametri
| Tipo: | String[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | 0 |
| Obbligatorio: | False |
| Valore dalla pipeline: | True |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-UseCulture
Usa il separatore di elenco per la cultura attuale come delimitatore degli elementi. Per trovare il separatore di elenco per una cultura, usare il comando seguente: (Get-Culture).TextInfo.ListSeparator.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
UseCulture
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
Input
String
È possibile reindirizzare una stringa che contiene un percorso a Import-Csv.
Output
Object
Questo cmdlet restituisce gli oggetti descritti dal contenuto nel file CSV.
Note
Poiché gli oggetti importati sono versioni CSV del tipo di oggetto, non vengono riconosciuti e formattati dalle voci di formattazione del tipo di PowerShell che formattano le versioni non CSV del tipo di oggetto.
Il risultato di un comando Import-Csv è 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 sono le proprietà dell'oggetto e gli elementi nelle righe sono i valori delle proprietà.
La riga dell'intestazione di colonna determina il numero di colonne e i nomi delle colonne. I nomi delle colonne sono anche i nomi 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 intestazione, i valori aggiuntivi vengono ignorati.
Se alla riga dell'intestazione di colonna manca un valore o contiene un valore nullo o vuoto, Import-Csv usa H seguito da un numero per l'intestazione di colonna mancante e per il nome della proprietà.
Nel file CSV, ogni oggetto è rappresentato da un elenco delimitato da virgole dei valori delle proprietà dell'oggetto. I valori delle proprietà vengono convertiti in stringhe utilizzando il metodo ToString() dell'oggetto, in modo che siano rappresentati dal nome del valore della proprietà.
Export-Csv non esporta i metodi dell'oggetto.