Export-Csv:有效地將對象轉換為 CSV 文件

如果您需要從 PowerShell 將信息發送到 CSV 文件,Export-CSV 命令確實可以幫助您。這個命令能夠將鬆散的文本整理成結構化格式,節省管理員的時間。我們可以使用 PowerShell 創建 CSV 文件,而不是繁瑣地處理 Excel。

您可以使用 Export-Csv 命令從任何 PowerShell 對象創建 CSV 文件,用於報告、發送到數據庫等等。

CSV 格式只是一個以逗號分隔的行列表,以文本文件形式存儲。由於它只是一個文本文件,我們理論上可以使用通用的文本文件命令,如 Set-Content,來完成這項任務。然而,如果使用通用命令,就需要自行構建所需的 CSV 結構。既然我們已經有了 Export-Csv 命令來將 CSV 輸出發送到文件,為什麼要這樣做呢?

CSV 文件需要特定的結構。這個命令具有理解、讀取和轉換信息為 CSV 文件的能力,這使得這個 PowerShell 命令非常方便。

使用 ManageEngine ADManager Plus 進行 Active Directory、Exchange 和 Microsoft 365 的管理和報告。立即下載免費試用版!

對象 -eq CSV 行

Export-Csv cmdlet 的目的是將 PowerShell 物件儲存到 CSV 檔案中。

假設您有一個具有名為 foobar 兩個屬性的物件。每個屬性都對應著值 12。當您將該物件傳送給 Export-Csv 時,它將建立一個具有兩個欄位和單一列的 CSV 檔案。然後,您可以匯入 CSV 內容並檢查其外觀。

PS> $testObject = [pscustomobject]@{'foo' = 1; 'bar' = 2}
PS> $testObject | Export-Csv -Path C:\TestObject.csv
PS> $testObject
foo	bar
1 	2
PS> Import-Csv -Path C:\TestObject.csv
foo	bar
1  	2

PowerShell 本質上將內存中的物件和 CSV 檔案視為相同!它也意味著我的欄位標籤應該是標題。使用通用文本 PowerShell 命令 Get-Content,我們可以檢查原始文本,以查看 Export-Csv 命令導出了什麼。

PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo","bar" "1","2"

請注意,該命令在每個行項目周圍使用雙引號。這樣可以包含帶有空格的欄位。

Export-CSV 有用的參數

在 Windows PowerShell 5.1 中,Export-CSV 命令會將創建 CSV 檔案的物件類型附加到檔案中。如果您不想看到此行,一個常用的參數是 NoTypeInformation,它完全刪除該行。

如果您使用多個不同的CSV文件或數據源進行工作,您可能會從艱難的方式中學到,Export-CSV會覆蓋現有文件。如果您使用Append參數,則沒有問題。Append參數允許您將行添加到CSV文件中,而不是覆蓋現有文件。

另一個有用的參數是Delimiter。有時,您可能需要創建一個不使用通常的列表分隔符(逗號)來分隔字段的CSV文件。相反,也許您需要創建一個使用制表符或甚至分號作為分隔符的文件。Export-Csv PowerShell cmdlet也可以通過指定所需的分隔符來幫助我們。

PS> $testObject | Export-Csv -Path C:\TestObject.csv -Delimiter "`t"
PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo"   "bar" "1"     "2"

處理引號

在創建CSV行時,Export-Csv將所有字段用引號括起來。在某些情況下,這可能是不可取的。不幸的是,沒有辦法阻止這種情況發生。但是,通過使用更多的代碼,您可以實現這一點。

下面是一個創建CSV文件的示例。然後,Get-Content讀取原始文本文件,在內存中將所有雙引號替換為空。然后,Set-Content將該信息重新寫入磁盤。

$testObject | Export-Csv -Path C:\TestObject.csv
(Get-Content -Path C:\TestObject.csv -Raw).replace('"','') | Set-Content -Path C:\TestObject.csv

使用ManageEngine ADManager Plus管理和报告Active Directory、Exchange和Microsoft 365。下载免费试用版!

摘要

Export-Csv cmdlet是一个简单但非常实用的管理CSV数据的工具。它可以理解CSV数据文件的结构,并将PowerShell对象转换为CSV行。

I’m not about to go back to batch, or VBScript where creating a CSV file from an existing object required instantiating a FileSystemObject, creating a loop and a bunch of Write() methods!

这个命令是开始编写PowerShell代码的又一个绝佳理由!

Source:
https://adamtheautomator.com/export-csv/