Import-Csv
Crea oggetti personalizzati simili alla tabella dagli elementi in un file con valori delimitati da virgole (CSV).
Sintassi
Import-Csv
[[-Path] <string[]>]
[[-Delimiter] <char>]
[-LiteralPath <string[]>]
[-Header <string[]>]
[-Encoding <string>]
[<CommonParameters>]
Import-Csv
[[-Path] <string[]>]
-UseCulture
[-LiteralPath <string[]>]
[-Header <string[]>]
[-Encoding <string>]
[<CommonParameters>]
Descrizione
Il Import-Csv
cmdlet crea oggetti personalizzati simili alla tabella 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 in qualsiasi file CSV, inclusi i file generati dal Export-Csv
cmdlet.
È possibile usare i parametri del cmdlet per specificare la riga di Import-Csv
intestazione di colonna e il delimitatore di elementi oppure per Import-Csv
usare il separatore di elenco per le impostazioni cultura correnti come delimitatore di elementi.
È anche possibile usare i ConvertTo-Csv
cmdlet e ConvertFrom-Csv
per convertire gli oggetti in stringhe CSV (e indietro). Questi cmdlet sono uguali Export-CSV
ai 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.
Import-Csv
usa il byte-order-mark (BOM) per rilevare il formato di codifica del file. Se il file non ha un BOM, presuppone che la codifica sia UTF8.
Esempio
Esempio 1: Importare oggetti processo
In questo esempio viene illustrato come esportare e quindi importare un file CSV di oggetti di elaborazione.
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 oggetti di elaborazione verso il basso della pipeline all'oggetto Export-Csv
. Il Export-Csv
cmdlet converte gli oggetti di 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 oggetti di processo verso il basso della pipeline a Export-Csv
. Il Export-Csv
cmdlet converte gli oggetti di processo in stringhe CSV e salva le stringhe nel file Processes.csv.
Il parametro Delimiter viene usato per specificare un delimitatore di punti. Il Import-Csv
cmdlet importa le stringhe CSV dal file Processes.csv. Le stringhe vengono salvate nella $P
variabile. Per $P
la 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 cmdlet con il Import-Csv
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 corrente. Il Get-Process
cmdlet invia oggetti di processo verso il basso della pipeline a Export-Csv
. Il Export-Csv
cmdlet converte gli oggetti di processo in stringhe CSV e salva le stringhe nel file Processes.csv. Il parametro UseCulture usa il separatore di elenco predefinito delle impostazioni cultura corrente. 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 usare 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 è facoltativo in PowerShell Core.
La $Header
variabile contiene un'intestazione personalizzata che sostituisce i valori predefiniti seguenti: HasMoreData, JobStateInfo, PSBeginTime, PSEndTime ePSJobTypeName. 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 l'oggetto PSCustomObject importato e visualizza l'oggetto nella console di PowerShell.
Esempio 5: Create un oggetto personalizzato usando un file CSV
In questo esempio viene illustrato 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 di 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à dal 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
In questo esempio viene illustrato come il cmdlet in PowerShell risponde quando la Import-Csv
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 che Import-Csv
restituisce.
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 Complete. 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 delle proprietà H1 e visualizza un avviso.
Parametri
-Delimiter
Specifica il delimitatore che separa i valori delle proprietà in un file CSV. Il valore predefinito è la virgola (,).
Immettere un carattere, ad esempio due punti (:). Per specificare un punto e virgola (;) racchiuderlo tra virgolette singole.
Se si specifica un carattere diverso dal delimitatore 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 il tipo di codifica per il file di destinazione. Il valore predefinito è Default.
I valori accettabili per questo parametro sono i seguenti:
- ASCII Usa il set di caratteri ASCII (a 7 bit).
- BigEndianUnicode Usa UTF-16 con l'ordine di byte big-endian.
- Predefinito Usa la codifica corrispondente alla tabella codici attiva del sistema (in genere ANSI).
- OEM Usa la codifica corrispondente alla tabella codici OEM corrente del sistema.
- Unicode Usa UTF-16 con l'ordine di byte little-endian.
- UTF7 Usa UTF-7.
- UTF8 Usa UTF-8.
- UTF32 Usa UTF-32 con l'ordine di byte little-endian.
Type: | Encoding |
Accepted values: | ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32 |
Position: | Named |
Default value: | Default |
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 virgole. 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 dati, le colonne di dati rimanenti vengono eliminate. Se si immettono più intestazioni di colonna rispetto alle colonne dati, le intestazioni di colonna aggiuntive vengono create con colonne di dati vuote.
Quando si usa il parametro Intestazione , 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 com'è digitato. 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 i caratteri come sequenze di escape.
Type: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Path
Specifica il percorso del file CSV da importare.
È anche possibile eseguire la pipe di un percorso a Import-Csv
.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-UseCulture
Usa il separatore di elenco per le impostazioni cultura correnti come delimitatore di elementi. 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
È possibile inviare una pipe a una stringa contenente 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 riconosciute e formattate dalle voci di formattazione dei tipi 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, quindi è possibile usare 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 Intestazione 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 dei valori delle proprietà dell'oggetto delimitati da virgole. I valori delle proprietà vengono convertiti in stringhe usando il metodo ToString() dell'oggetto, quindi vengono rappresentati dal nome del valore della proprietà. Export-Csv
non esporta i metodi dell'oggetto.