共用方式為


ConvertTo-Csv

將 .NET 物件轉換成一系列字元分隔值 (CSV) 字串。

語法

Delimiter (預設值)

ConvertTo-Csv
    [-InputObject] <PSObject>
    [[-Delimiter] <Char>]
    [-IncludeTypeInformation]
    [-NoTypeInformation]
    [-QuoteFields <String[]>]
    [-UseQuotes <QuoteKind>]
    [<CommonParameters>]

UseCulture

ConvertTo-Csv
    [-InputObject] <PSObject>
    [-UseCulture]
    [-IncludeTypeInformation]
    [-NoTypeInformation]
    [-QuoteFields <String[]>]
    [-UseQuotes <QuoteKind>]
    [<CommonParameters>]

Description

ConvertTo-CSV cmdlet 傳回一系列逗號分隔值 (CSV) 字串,這些字串表示您提交的物件。 接著,您可以使用 ConvertFrom-Csv Cmdlet,從 CSV 字串重新建立物件。 從 CSV 轉換的物件是原始物件的字串值,其中包含屬性值和無方法。

您可以使用 Export-Csv Cmdlet,將物件轉換成 CSV 字串。 Export-CSV 類似於 ConvertTo-CSV,不同之處在於它會將 CSV 字串儲存至檔案。

ConvertTo-CSV Cmdlet 具有參數來指定逗號以外的分隔符,或使用目前的文化特性做為分隔符。

範例

範例 1:將物件轉換成 CSV

這個範例會將 Process 物件轉換成 CSV 字串。

Get-Process -Name pwsh | ConvertTo-Csv -NoTypeInformation
"Name","SI","Handles","VM","WS","PM","NPM","Path","Parent","Company","CPU","FileVersion", ...
"pwsh","8","950","2204001161216","100925440","59686912","67104", ...

Get-Process Cmdlet 會取得 Process 物件,並使用 Name 參數來指定 PowerShell 進程。 進程物件會向下傳送至 ConvertTo-CSV Cmdlet。 ConvertTo-CSV Cmdlet 會將 物件轉換成 CSV 字串。 NoTypeInformation 參數會從 CSV 輸出中移除 #TYPE 資訊標頭,而且 PowerShell 6 中不需要。

範例 2:將 DateTime 物件轉換成 CSV

本範例會將 DateTime 物件轉換成 CSV 字串。

$Date = Get-Date
ConvertTo-Csv -InputObject $Date -Delimiter ';' -NoTypeInformation
"DisplayHint";"DateTime";"Date";"Day";"DayOfWeek";"DayOfYear";"Hour";"Kind";"Millisecond";"Minute";"Month";"Second";"Ticks";"TimeOfDay";"Year"
"DateTime";"Friday, January 4, 2019 14:40:51";"1/4/2019 00:00:00";"4";"Friday";"4";"14";"Local";"711";"40";"1";"51";"636822096517114991";"14:40:51.7114991";"2019"

Get-Date Cmdlet 會取得 DateTime 物件,並將它儲存在 $Date 變數中。 ConvertTo-Csv Cmdlet 會將 DateTime 物件轉換成字串。 InputObject 參數會使用儲存在 變數中的 $Date 物件。 Delimiter 參數會指定分號來分隔字串值。 NoTypeInformation 參數會從 CSV 輸出中移除 #TYPE 資訊標頭,而且 PowerShell 6 中不需要。

範例 3:將 PowerShell 事件記錄檔轉換成 CSV

此範例會將PowerShell的 Windows 事件記錄檔轉換成一系列 CSV 字串。

(Get-Culture).TextInfo.ListSeparator
Get-WinEvent -LogName 'PowerShellCore/Operational' | ConvertTo-Csv -UseCulture -NoTypeInformation
,
"Message","Id","Version","Qualifiers","Level","Task","Opcode","Keywords","RecordId", ...
"Error Message = System error""4100","1",,"3","106","19","0","31716","PowerShellCore", ...

Get-Culture Cmdlet 會使用 TextInfo 巢狀屬性ListSeparator,並顯示目前文化特性的預設清單分隔符。 Get-WinEvent Cmdlet 會取得事件記錄檔物件,並使用 LogName 參數來指定記錄檔名稱。 事件記錄檔物件會向下傳送至 ConvertTo-Csv Cmdlet。 ConvertTo-Csv Cmdlet 會將事件記錄檔物件轉換成一系列 CSV 字串。 UseCulture 參數會使用目前文化特性的預設清單分隔符作為分隔符。 NoTypeInformation 參數會從 CSV 輸出中移除 #TYPE 資訊標頭,而且 PowerShell 6 中不需要。

範例 4:使用兩個數據行的引號轉換成 CSV

本範例會將 DateTime 物件轉換成 CSV 字串。

Get-Date | ConvertTo-Csv -QuoteFields "DateTime","Date"
DisplayHint,"DateTime","Date",Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:27:34 AM","8/22/2019 12:00:00 AM",22,Thursday,234,11,Local,569,27,8,34,637020700545699784,11:27:34.5699784,2019

範例 5:只有在需要時才使用引號轉換成 CSV

本範例會將 DateTime 物件轉換成 CSV 字串。

Get-Date | ConvertTo-Csv -UseQuotes AsNeeded
DisplayHint,DateTime,Date,Day,DayOfWeek,DayOfYear,Hour,Kind,Millisecond,Minute,Month,Second,Ticks,TimeOfDay,Year
DateTime,"Thursday, August 22, 2019 11:31:00 AM",8/22/2019 12:00:00 AM,22,Thursday,234,11,Local,713,31,8,0,637020702607132640,11:31:00.7132640,2019

參數

-Delimiter

指定分隔符,以分隔 CSV 字串中的屬性值。 預設值為逗號 (,)。 輸入字元,例如冒號(:)。 若要指定分號 (;),請以單引弧括住它。

參數屬性

類型:Char
預設值:comma (,)
支援萬用字元:False
不要顯示:False

參數集

Delimiter
Position:1
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-IncludeTypeInformation

使用此參數時,輸出的第一行包含 #TYPE 後跟物件類型的完全限定名稱。 例如,#TYPE System.Diagnostics.Process

此參數是在 PowerShell 6.0 中引進的。

參數屬性

類型:SwitchParameter
支援萬用字元:False
不要顯示:False
別名:ITI

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-InputObject

指定轉換成 CSV 字串的物件。 輸入包含 物件的變數,或輸入取得物件的命令或表達式。 您也可以使用管線將物件傳送至 ConvertTo-CSV

參數屬性

類型:PSObject
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-NoTypeInformation

從輸出中移除 #TYPE 資訊標頭。 此參數成為 PowerShell 6.0 中的預設值,並包含在回溯相容性中。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False
別名:NTI

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-QuoteFields

指定應加上引號的數據行名稱。 當此參數只使用指定的數據行時,會加上引號。 此參數已在PowerShell 7.0中新增。

參數屬性

類型:

String[]

預設值:None
支援萬用字元:False
不要顯示:False
別名:QF

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-UseCulture

使用針對目前文化環境的清單分隔符作為項目分隔符。 若要尋找文化特性的清單分隔符,請使用下列命令:(Get-Culture).TextInfo.ListSeparator

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

UseCulture
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-UseQuotes

指定 CSV 檔案中使用引號的時機。 可能的值為:

  • 永不 - 不要引用任何東西
  • 一律 - 引用所有項目 (預設行為)
  • AsNeeded - 僅引用包含分隔符的欄位

此參數已在PowerShell 7.0中新增。

參數屬性

類型:Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind
預設值:Always
支援萬用字元:False
不要顯示:False
別名:UQ

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters

輸入

PSObject

您可以透過管道將具有擴充型態系統 (ETS) 配接器的任何物件傳遞給 ConvertTo-CSV

輸出

String

CSV 輸出作為字串集合返回。

備註

在 CSV 格式中,每個物件都由其屬性值的逗號分隔清單表示。 屬性值會使用 物件的 ToString() 方法轉換成字串。 字串會以屬性值名稱表示。 ConvertTo-CSV 不會匯出物件的方法。

CSV 字串會輸出如下:

  • 如果使用 includeTypeInformation ,則第一個字串是由 #TYPE 所組成,後面接著物件類型的完整名稱。 例如,#TYPE System.Diagnostics.Process
  • 如果未使用 IncludeTypeInformation,則第一個字串會包含數據行標頭。 標頭包含第一個物件的屬性名稱做為逗號分隔清單。
  • 其餘字串包含每個物件的屬性值逗號分隔清單。

從 PowerShell 6.0 開始,ConvertTo-CSV 的預設行為是不包含 CSV 中的 #TYPE 資訊,並隱含 noTypeInformation IncludeTypeInformation 可用來包含 #TYPE 資訊,並模擬 PowerShell 6.0 之前 ConvertTo-CSV 的默認行為。

當您將多個物件提交至 ConvertTo-CSV時,ConvertTo-CSV 會根據您送出之第一個對象的屬性來排序字串。 如果其餘對象沒有其中一個指定的屬性,該對象的屬性值為 Null,以兩個連續逗號表示。 如果其餘物件有其他屬性,則會忽略這些屬性值。