ConvertTo-Csv
將 .NET 物件轉換成一系列的字元分隔值, (CSV) 字串。
Syntax
ConvertTo-Csv
[-InputObject] <PSObject>
[[-Delimiter] <Char>]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[<CommonParameters>]
ConvertTo-Csv
[-InputObject] <PSObject>
[-UseCulture]
[-IncludeTypeInformation]
[-NoTypeInformation]
[-QuoteFields <String[]>]
[-UseQuotes <QuoteKind>]
[<CommonParameters>]
Description
Cmdlet 會 ConvertTo-CSV
傳回一系列字元分隔值, (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", ...
Cmdlet 會 Get-Process
取得 Process 物件,並使用 Name 參數來指定 PowerShell 進程。 進程物件會向下傳送至 Cmdlet 的 ConvertTo-CSV
管線。 Cmdlet 會將 ConvertTo-CSV
物件轉換成 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"
Cmdlet Get-Date
會取得 DateTime 物件,並將它儲存在變數中 $Date
。 Cmdlet 會將 ConvertTo-Csv
DateTime 物件轉換成字串。 InputObject 參數會使用儲存在變數中的 $Date
DateTime 物件。 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", ...
Cmdlet Get-Culture
會使用巢狀屬性 TextInfo 和 ListSeparator ,並顯示目前文化特性的預設清單分隔符。 Cmdlet Get-WinEvent
會取得事件記錄檔物件,並使用 LogName 參數來指定記錄檔名稱。 事件記錄檔物件會向下傳送至 ConvertTo-Csv
Cmdlet。 Cmdlet ConvertTo-Csv
會將事件記錄檔物件轉換成一系列的 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
範例 6:將哈希表轉換成 CSV
在 PowerShell 7.2 和更新版本中,當您將哈希表轉換成 CSV 時,第一個哈希表的索引鍵會串行化並當做輸出中的標頭使用。
$person1 = @{
Name = 'John Smith'
Number = 1
}
$person2 = @{
Name = 'Jane Smith'
Number = 2
}
$allPeople = $person1, $person2
$allPeople | ConvertTo-Csv
"Name","Number"
"John Smith","1"
"Jane Smith","2"
範例 7:使用其他屬性將哈希表轉換為 CSV
在 PowerShell 7.2 和更新版本中,當您轉換已新增 Add-Member
其他屬性的哈希表時,也會 Select-Object
在 CSV 輸出中新增其他屬性做為標頭。
$allPeople | Add-Member -Name ExtraProp -Value 42
$allPeople | ConvertTo-Csv
"Name","Number","ExtraProp"
"John Smith","1","42"
"Jane Smith","2","42"
每個哈希表都有一 ExtraProp
個名為 的屬性, Add-Member
由 新增,然後轉換成 CSV。 您現在可以在 ExtraProp
輸出中看到標頭。
如果新增的屬性名稱與哈希表中的索引鍵 名稱相同 ,則索引鍵會優先使用,而且只會將索引鍵轉換成 CSV。
參數
-Delimiter
指定分隔符,以分隔 CSV 字串中的屬性值。 預設值為逗號 (,
) 。 輸入字元,例如冒號 (:
) 。 若要指定分號 (;
) 以單引弧括住。
Type: | Char |
Position: | 1 |
Default value: | comma (,) |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeTypeInformation
使用此參數時,輸出的第一行包含 #TYPE
後面接著物件類型的完整名稱。 例如: #TYPE System.Diagnostics.Process
。
此參數是在 PowerShell 6.0 中引進。
Type: | SwitchParameter |
Aliases: | ITI |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
指定轉換成 CSV 字串的物件。 輸入包含物件的變數,或輸入可取得物件的命令或運算式。 您也可以使用管線會傳送至 ConvertTo-CSV
。
Type: | PSObject |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoTypeInformation
#TYPE
從輸出中移除資訊標頭。 此參數在 PowerShell 6.0 中成為預設值,並隨附於回溯相容性。
Type: | SwitchParameter |
Aliases: | NTI |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-QuoteFields
指定應加上引號的數據行名稱。 當此參數只使用指定的數據行時,會加上引號。 此參數已在PowerShell 7.0中新增。
Type: | String[] |
Aliases: | QF |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseCulture
使用目前文化特性的清單分隔符做為專案分隔符。 若要尋找文化特性的清單分隔符,請使用下列命令: (Get-Culture).TextInfo.ListSeparator
。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseQuotes
指定 CSV 檔案中使用引號的時機。 可能的值包括:
- 永不 - 不要加上任何引號
- 一律 - (預設行為) 加上引號
- AsNeeded - 僅包含分隔符、雙引號或換行符的引號字段
此參數已在PowerShell 7.0中新增。
Type: | Microsoft.PowerShell.Commands.BaseCsvWritingCommand+QuoteKind |
Aliases: | UQ |
Position: | Named |
Default value: | Always |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
輸入
您可以使用管線將具有擴充類型系統的任何物件 (ETS) 配接器傳送至此 Cmdlet。
輸出
此 Cmdlet 會傳回代表每個已轉換物件的一或多個字串。
備註
在 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,如兩個連續逗號表示。 如果其餘的物件有其他屬性,則會忽略那些屬性值。