Condividi tramite


Export-Csv

Converte gli oggetti in una serie di stringhe con valori delimitati da caratteri (CSV) e salva le stringhe in un file.

Sintassi

Export-Csv
      [[-Path] <string>]
      [[-Delimiter] <char>]
      -InputObject <psobject>
      [-LiteralPath <string>]
      [-Force]
      [-NoClobber]
      [-Encoding <string>]
      [-Append]
      [-NoTypeInformation]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Export-Csv
      [[-Path] <string>]
      -InputObject <psobject>
      [-LiteralPath <string>]
      [-Force]
      [-NoClobber]
      [-Encoding <string>]
      [-Append]
      [-UseCulture]
      [-NoTypeInformation]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

Descrizione

Il Export-CSV cmdlet crea un file CSV degli oggetti inviati. Ogni oggetto è una riga che include un elenco separato da caratteri dei valori delle proprietà dell'oggetto. È possibile usare il Export-CSV cmdlet per creare fogli di calcolo e condividere dati con programmi che accettano file CSV come input.

Non formattare gli oggetti prima di inviarli al Export-CSV cmdlet. Se Export-CSV riceve oggetti formattati, il file CSV contiene le proprietà di formato anziché le proprietà dell'oggetto. Per esportare solo le proprietà selezionate di un oggetto, usare il Select-Object cmdlet .

Esempio

Esempio 1: Esportare le proprietà del processo in un file CSV

In questo esempio vengono selezionati oggetti Process con proprietà specifiche, esporta gli oggetti in un file CSV.

Get-Process -Name WmiPrvSE |
    Select-Object -Property BasePriority,Id,SessionId,WorkingSet |
    Export-Csv -Path .\WmiData.csv -NoTypeInformation
Import-Csv -Path .\WmiData.csv

BasePriority Id    SessionId WorkingSet
------------ --    --------- ----------
8            976   0         20267008
8            2292  0         36786176
8            3816  0         30351360
8            8604  0         15011840
8            10008 0         8830976
8            11764 0         14237696
8            54632 0         9502720

Il Get-Process cmdlet ottiene gli oggetti Process . Il parametro Name filtra l'output in modo da includere solo gli oggetti WmiPrv edizione Standard process. Gli oggetti processo vengono inviati alla pipeline al Select-Object cmdlet . Select-Object utilizza il parametro Property per selezionare un subset di proprietà dell'oggetto processo. Gli oggetti processo vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti processo in una serie di stringhe CSV. Il parametro Path specifica che il WmiData.csv file viene salvato nella directory corrente. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. Il Import-Csv cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Esempio 2: Esportare i processi in un file delimitato da virgole

Questo esempio ottiene oggetti Process ed esporta gli oggetti in un file CSV.

Get-Process | Export-Csv -Path .\Processes.csv -NoTypeInformation
Get-Content -Path .\Processes.csv

"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"ApplicationFrameHost","4","511","2203597099008","35364864","21979136","30048", ...

Il Get-Process cmdlet ottiene oggetti Process . Gli oggetti processo vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti processo in una serie di stringhe CSV. Il parametro Path specifica che il Processes.csv file viene salvato nella directory corrente. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. Il Get-Content cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Esempio 3: Esportare i processi in un file delimitato da punto e virgola

Questo esempio ottiene oggetti Process ed esporta gli oggetti in un file con un delimitatore da punto e virgola.

Get-Process | Export-Csv -Path .\Processes.csv -Delimiter ';' -NoTypeInformation
Get-Content -Path .\Processes.csv

"Name";"SI";"Handles";"VM";"WS";"PM";"NPM";"Path";"Parent";"Company";"CPU";"FileVersion"; ...
"ApplicationFrameHost";"4";"509";"2203595321344";"34807808";"21770240";"29504"; ...

Il Get-Process cmdlet ottiene oggetti Process . Gli oggetti processo vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti processo in una serie di stringhe CSV. Il parametro Path specifica che il Processes.csv file viene salvato nella directory corrente. Il parametro Delimiter specifica un punto e virgola per separare i valori stringa. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. Il Get-Content cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Esempio 4: Esportare i processi usando il separatore di elenco delle impostazioni cultura correnti

Questo esempio ottiene oggetti Process ed esporta gli oggetti in un file. Il delimitatore è il separatore di elenco delle impostazioni cultura correnti.

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

"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"ApplicationFrameHost","4","511","2203597099008","35364864","21979136","30048", ...

Il Get-Culture cmdlet usa le proprietà annidate TextInfo e ListSeparator e visualizza il separatore di elenco predefinito delle impostazioni cultura correnti. Il Get-Process cmdlet ottiene oggetti Process . Gli oggetti processo vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti processo in una serie di stringhe CSV. Il parametro Path specifica che il Processes.csv file viene salvato nella directory corrente. Il parametro UseCulture usa il separatore di elenco predefinito delle impostazioni cultura correnti come delimitatore. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. Il Get-Content cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Esempio 5: Esportare processi con informazioni sul tipo

Questo esempio illustra come includere le informazioni sull'intestazione #TYPE in un file CSV. L'intestazione #TYPE è l'impostazione predefinita nelle versioni precedenti a PowerShell 6.0.

Get-Process | Export-Csv -Path .\Processes.csv
Get-Content -Path .\Processes.csv

#TYPE System.Diagnostics.Process
"Name","SI","Handles","VM","WS","PM","NPM","Path","Company","CPU","FileVersion", ...
"ApplicationFrameHost","4","507","2203595001856","35139584","20934656","29504", ...

Il Get-Process cmdlet ottiene oggetti Process . Gli oggetti processo vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti processo in una serie di stringhe CSV. Il parametro Path specifica che il Processes.csv file viene salvato nella directory corrente. Il Get-Content cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Esempio 6: Esportare e aggiungere oggetti a un file CSV

In questo esempio viene descritto come esportare oggetti in un file CSV e usare il parametro Append per aggiungere oggetti a un file esistente.

$AppService = (Get-Service -DisplayName *Application* | Select-Object -Property DisplayName, Status)
$AppService | Export-Csv -Path .\Services.Csv -NoTypeInformation
Get-Content -Path .\Services.Csv
$WinService = (Get-Service -DisplayName *Windows* | Select-Object -Property DisplayName, Status)
$WinService | Export-Csv -Path .\Services.csv -NoTypeInformation -Append
Get-Content -Path .\Services.Csv

"DisplayName","Status"
"Application Layer Gateway Service","Stopped"
"Application Identity","Running"
"Windows Audio Endpoint Builder","Running"
"Windows Audio","Running"
"Windows Event Log","Running"

Il Get-Service cmdlet ottiene oggetti servizio. Il parametro DisplayName restituisce i servizi che contengono la parola Application. Gli oggetti servizio vengono inviati alla pipeline al Select-Object cmdlet . Select-Object utilizza il parametro Property per specificare le proprietà DisplayName e Status . La $AppService variabile archivia gli oggetti .

Gli $AppService oggetti vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti servizio in una serie di stringhe CSV. Il parametro Path specifica che il Services.csv file viene salvato nella directory corrente. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. Il Get-Content cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

I Get-Service cmdlet e Select-Object vengono ripetuti per i servizi che contengono la parola Windows. La $WinService variabile archivia gli oggetti servizio. Il Export-Csv cmdlet usa il parametro Append per specificare che gli $WinService oggetti vengono aggiunti al file esistente Services.csv . Il Get-Content cmdlet viene ripetuto per visualizzare il file aggiornato che include i dati aggiunti.

Esempio 7: Formattare il cmdlet all'interno di una pipeline crea risultati imprevisti

Questo esempio illustra perché è importante non usare un cmdlet di formato all'interno di una pipeline. Quando viene ricevuto un output imprevisto, risolvere i problemi relativi alla sintassi della pipeline.

Get-Date | Select-Object -Property DateTime, Day, DayOfWeek, DayOfYear |
 Export-Csv -Path .\DateTime.csv -NoTypeInformation
Get-Content -Path .\DateTime.csv

"DateTime","Day","DayOfWeek","DayOfYear"
"Wednesday, January 2, 2019 14:59:34","2","Wednesday","2"

Get-Date | Format-Table -Property DateTime, Day, DayOfWeek, DayOfYear |
 Export-Csv -Path .\FTDateTime.csv -NoTypeInformation
Get-Content -Path .\FTDateTime.csv

"ClassId2e4f51ef21dd47e99d3c952918aff9cd","pageHeaderEntry","pageFooterEntry","autosizeInfo", ...
"033ecb2bc07a4d43b5ef94ed5a35d280",,,,"Microsoft.PowerShell.Commands.Internal.Format. ...
"9e210fe47d09416682b841769c78b8a3",,,,,
"27c87ef9bbda4f709f6b4002fa4af63c",,,,,
"4ec4f0187cb04f4cb6973460dfe252df",,,,,
"cf522b78d86c486691226b40aa69e95c",,,,,

Il Get-Date cmdlet ottiene l'oggetto DateTime . L'oggetto viene inviato alla pipeline al Select-Object cmdlet . Select-Object utilizza il parametro Property per selezionare un subset di proprietà dell'oggetto. L'oggetto viene inviato alla pipeline al Export-Csv cmdlet . Export-Csv converte l'oggetto in un formato CSV. Il parametro Path specifica che il DateTime.csv file viene salvato nella directory corrente. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. Il Get-Content cmdlet usa il parametro Path per visualizzare il file CSV che si trova nella directory corrente.

Quando il Format-Table cmdlet viene usato all'interno della pipeline per selezionare le proprietà vengono ricevuti risultati imprevisti. Format-Table invia oggetti di formato tabella verso il Export-Csv basso nella pipeline al cmdlet anziché all'oggetto DateTime . Export-Csv converte gli oggetti di formato tabella in una serie di stringhe CSV. Il Get-Content cmdlet visualizza il file CSV che contiene gli oggetti di formato tabella.

Esempio 8: Uso del parametro Force per sovrascrivere i file di sola lettura

In questo esempio viene creato un file vuoto di sola lettura e viene usato il parametro Force per aggiornare il file.

New-Item -Path .\ReadOnly.csv -ItemType File
Set-ItemProperty -Path .\ReadOnly.csv -Name IsReadOnly -Value $true
Get-Process | Export-Csv -Path .\ReadOnly.csv -NoTypeInformation

Export-Csv : Access to the path 'C:\ReadOnly.csv' is denied.
At line:1 char:15
+ Get-Process | Export-Csv -Path .\ReadOnly.csv -NoTypeInformation
+               ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OpenError: (:) [Export-Csv], UnauthorizedAccessException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ExportCsvCommand

Get-Process | Export-Csv -Path .\ReadOnly.csv -NoTypeInformation -Force
Get-Content -Path .\ReadOnly.csv

"Name";"SI";"Handles";"VM";"WS";"PM";"NPM";"Path";"Parent";"Company";"CPU";"FileVersion"; ...
"ApplicationFrameHost";"4";"509";"2203595321344";"34807808";"21770240";"29504"; ...

Il New-Item cmdlet usa i parametri Path e ItemType per creare il ReadOnly.csv file nella directory corrente. Il Set-ItemProperty cmdlet usa i parametri Name e Value per modificare la proprietà IsReadOnly del file su true. Il Get-Process cmdlet ottiene oggetti Process . Gli oggetti processo vengono inviati alla pipeline al Export-Csv cmdlet . Export-Csv converte gli oggetti processo in una serie di stringhe CSV. Il parametro Path specifica che il ReadOnly.csv file viene salvato nella directory corrente. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6. L'output mostra che il file non è scritto perché l'accesso è negato.

Il parametro Force viene aggiunto al Export-Csv cmdlet per forzare l'esportazione per scrivere nel file. Il Get-Content cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Esempio 9: Uso del parametro Force con Append

In questo esempio viene illustrato come usare i parametri Force e Append . Quando questi parametri vengono combinati, le proprietà degli oggetti non corrispondenti possono essere scritte in un file CSV.

$Content = [PSCustomObject]@{Name = 'PowerShell'; Version = '7.0'}
$Content | Export-Csv -Path .\ParmFile.csv -NoTypeInformation
$AdditionalContent = [PSCustomObject]@{Name = 'Windows PowerShell'; Edition = 'Desktop'}
$AdditionalContent | Export-Csv -Path .\ParmFile.csv -NoTypeInformation -Append

Export-Csv : Cannot append CSV content to the following file: ParmFile.csv.
The appended object does not have a property that corresponds to the following column:
Version. To continue with mismatched properties, add the -Force parameter, and then retry
 the command.
At line:1 char:22
+ $AdditionalContent | Export-Csv -Path .\ParmFile.csv -NoTypeInformation -Append
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidData: (Version:String) [Export-Csv], InvalidOperationException
+ FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell. ...

$AdditionalContent | Export-Csv -Path .\ParmFile.csv -NoTypeInformation -Append -Force
Import-Csv -Path .\ParmFile.csv

Name               Version
----               -------
PowerShell         7.0
Windows PowerShell

Un'espressione crea psCustomObjectcon le proprietà Name e Version. I valori vengono archiviati nella $Content variabile . La $Content variabile viene inviata alla pipeline al Export-Csv cmdlet . Export-Csv utilizza il parametro Path e salva il ParmFile.csv file nella directory corrente. Il parametro NoTypeInformation rimuove l'intestazione delle informazioni #TYPE dall'output CSV e non è necessaria in PowerShell 6.

Un'altra espressione crea un PSCustomObject con le proprietà Name e Edition . I valori vengono archiviati nella $AdditionalContent variabile . La $AdditionalContent variabile viene inviata alla pipeline al Export-Csv cmdlet . Il parametro Append viene usato per aggiungere i dati al file. L'accodamento non riesce perché esiste una mancata corrispondenza del nome di proprietà tra Version e Edition.

Il Export-Csv parametro Force del cmdlet viene usato per forzare l'esportazione a scrivere nel file. La proprietà Edition viene rimossa. Il Import-Csv cmdlet usa il parametro Path per visualizzare il file che si trova nella directory corrente.

Parametri

-Append

Usare questo parametro in modo da Export-CSV aggiungere l'output CSV alla fine del file specificato. Senza questo parametro, Export-CSV sostituisce il contenuto del file senza avviso.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

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

-Confirm

Richiede conferma prima di eseguire il cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Delimiter

Specifica un delimitatore per separare i valori delle proprietà. Il valore predefinito è una virgola (,). Immettere un carattere, ad esempio due punti (:). Per specificare un punto e virgola (;), racchiuderlo tra virgolette.

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 esportato. Il valore predefinito è ASCII.

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 dei byte big-endian.
  • Default Usa la codifica che corrisponde 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 dei byte little-endian.
  • UTF7 Usa UTF-7.
  • UTF8 Usa UTF-8.
  • UTF32 Usa UTF-32 con l'ordine dei byte little-endian.
Type:String
Accepted values:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Default value:ASCII
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

Questo parametro consente di Export-Csv sovrascrivere i file con l'attributo Sola lettura.

Quando i parametri Force e Append vengono combinati, gli oggetti che contengono proprietà non corrispondenti possono essere scritti in un file CSV. Solo le proprietà corrispondenti vengono scritte nel file. Le proprietà non corrispondenti vengono rimosse.

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

-InputObject

Specifica gli oggetti da esportare come stringhe CSV. Immettere una variabile che contiene gli oggetti oppure digitare un comando o un'espressione che ottiene gli oggetti. È anche possibile inviare oggetti tramite pipe a Export-CSV.

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

-LiteralPath

Specifica il percorso del file di output CSV. 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, usare virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Type:String
Aliases:PSPath
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoClobber

Usare questo parametro in modo che Export-CSV non sovrascriva un file esistente. Per impostazione predefinita, se il file esiste nel percorso specificato, Export-CSV sovrascrive il file senza avviso.

Type:SwitchParameter
Aliases:NoOverwrite
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoTypeInformation

Rimuove l'intestazione delle #TYPE informazioni dall'output. Questo parametro è diventato l'impostazione predefinita in PowerShell 6.0 ed è incluso per la compatibilità con le versioni precedenti.

Type:SwitchParameter
Aliases:NTI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Parametro obbligatorio che specifica il percorso in cui salvare il file di output CSV.

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
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:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Impedisce l'elaborazione o l'esecuzione di modifiche al cmdlet. L'output mostra cosa accadrebbe se il cmdlet fosse in esecuzione.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

PSObject

È possibile inviare tramite pipe qualsiasi oggetto con un adattatore ETS (Extended Type System) a questo cmdlet.

Output

None

Questo cmdlet non restituisce output.

Note

Windows PowerShell include gli alias seguenti per Export-Csv:

  • epcsv

Il Export-CSV cmdlet converte gli oggetti inviati in una serie di stringhe CSV e le salva nel file di testo specificato. È possibile usare Export-CSV per salvare gli oggetti in un file CSV e quindi usare il Import-Csv cmdlet per creare oggetti dal file CSV.

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

Le stringhe CSV vengono restituite come segue:

  • Per impostazione predefinita, la prima stringa contiene l'intestazione delle informazioni #TYPE seguita dal nome completo del tipo di oggetto. Ad esempio, #TYPE System.Diagnostics.Process.
  • Se viene usata la prima stringa NoTypeInformation include le intestazioni di colonna. Le intestazioni contengono i nomi delle proprietà del primo oggetto come elenco delimitato da caratteri.
  • Le stringhe rimanenti contengono elenchi separati da caratteri dei valori delle proprietà di ogni oggetto.

Quando si inviano più oggetti a Export-CSV, Export-CSV organizza il file in base alle proprietà del primo oggetto inviato. Se gli oggetti rimanenti non hanno una delle proprietà specificate, il valore della proprietà di tale oggetto è Null e sarà rappresentato da due virgole consecutive. Se gli oggetti rimanenti hanno proprietà aggiuntive, tali valori delle proprietà non verranno inclusi nel file.

È possibile usare il Import-Csv cmdlet per ricreare oggetti dalle stringhe CSV nei file. Gli oggetti risultanti sono versioni CSV degli oggetti originali, costituiti da rappresentazioni di stringa dei valori delle proprietà e nessun metodo.

I ConvertTo-Csv cmdlet e ConvertFrom-Csv converteno gli oggetti in stringhe CSV e da stringhe CSV. Export-CSV è uguale ConvertTo-CSVa , ad eccezione del fatto che salva le stringhe CSV in un file.