Export-Csv:高效将对象转换为 CSV 文件

如果您需要从 PowerShell 发送信息到 CSV 文件,Export-CSV cmdlet 就在这里帮忙。这个 cmdlet 能够帮助管理员节省大量时间,将松散的文本整理成结构化格式。与其在 Excel 中摆弄,我们可以使用 PowerShell 来创建 CSV 文件。

您可以使用 Export-Csv cmdlet 从任何 PowerShell 对象创建 CSV 文件,用于生成报告、发送到数据库等等。

CSV 格式仅仅是作为文本文件存储的逗号分隔的行列表。由于它只是一个文本文件,我们理论上可以只使用通用的文本文件命令,比如Set-Content来完成任务。然而,要使用通用命令,就需要自己构建必要的 CSV 结构。既然已经有了一个用于将 CSV 输出发送到文件的 CSV 导出命令Export-Csv,为什么还要自己构建呢?

CSV 文件需要特定的结构。这个 cmdlet 能够理解、读取并转换信息为CSV文件,这正是这个 PowerShell cmdlet 如此方便的地方。

使用 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 cmdlte创建CSV文件的对象类型。如果您不想看到此行,一个常用的参数是NoTypeInformation,它完全消除了此行。

如果您使用许多不同的CSV文件或数据源,您可能会发现Export-CSV会覆盖现有文件。不过,如果您使用Append参数,这就没问题了。

Append参数允许您将行添加到CSV中,而不是覆盖现有文件。另一个有用的参数是Delimiter。偶尔,您可能需要创建一个不使用通常的列表分隔符(逗号)来分隔字段的CSV文件。也许您需要创建一个使用制表符作为分隔符甚至是分号的文件。

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

Export-Csv PowerShell cmdlet也可以通过指定我们需要的任何分隔符来帮助我们。#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

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

摘要

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/