如何在PowerShell中导出到CSV

您所在的位置:网站首页 powershell脚本文件格式 如何在PowerShell中导出到CSV

如何在PowerShell中导出到CSV

2024-01-18 09:32| 来源: 网络整理| 查看: 265

CSV(逗号分隔值)是一种以纯文本文件存储数据的方式。它是一种共享结构化信息的有效方法,类似于电子表格。它是一种通用格式,被众多办公和数据库应用程序所支持。

CSV这个术语还有其他含义,例如,"字符分离值"、"逗号分隔文件 "等。

在本指南中,我们将演示如何在PowerShell中以CSV格式导出数据。

CSV文件结构

CSV格式遵循一个非常简单的结构。任何CSV文件都有".csv "作为文件扩展名。在这里,我生成了一个样本CSV文件,包含

$ cat sample.csv

我们可以看到,每一行都包含几个由逗号分隔的数值。一个CSV文件可以包含多少个条目是没有限制的。

结构的简单性是关键特征。CSV格式的设计使得它可以很容易地被用来将数据导出到其他程序中。其结果也是人类可读的,可以使用任何文本编辑器查看。像MS Excel、Calc等办公软件也默认支持CSV。

从PowerShell导出到CSV

PowerShell是一种强大的外壳和脚本语言。它支持许多基本和高级功能,包括将各种数据导出为CSV格式。

与其他的shell类似,PowerShell有自己的一套命令,称为cmdlets。要导出到CSV,PowerShell有一个专门的cmdletExport-CSV。它把一个对象作为输入,并把它导出到一个CSV文件。

由于结构简单,它也可以使用Set-Contentcmdlet来实现。然而,它需要你手动定义CSV结构。使用Export-CSV可以大大减少工作量。

Export-CSV的帮助页面将显示所有支持的命令。

$ help Export-CSV

一个实际的例子是导出运行进程的列表。它在某些调试/监控的情况下是很有用的。为了得到进程的列表,我们将使用cmdletGet-Process。

$ Get-Process

现在,用管道将输出转为Export-CSV。

$ Get-Process | Export-CSV -Path /home/viktor/Desktop/processes.csv

这里,标志"-Path "描述了保存生成的CSV文件的位置。要检查CSV文件的内容,使用cmdletGet-Content。

$ Get-Content /home/viktor/Desktop/processes.csv

自定义定界符

对于任何CSV文件,使用逗号(,)作为分隔符是标准的。然而,在某些情况下,你可能想把定界符改为逗号以外的东西。Export-CSV cmdlet支持为CSV文件设置一个自定义定界符。它可以是任何字符。

在下面的例子中,我们将使用分号(;)作为分界符。

$ Get-Process | Export-CSV -NoTypeInformation -Delimiter ";" -Path /home/viktor/Desktop/processes.csv

让我们检查该命令的输出。

$ Get-Content /home/viktor/Desktop/processes.csv

追加到现有的CSV文件

Export-CSVcmdlet支持向现有的CSV文件添加内容。它可以帮助将数据编入一个单一的数据库。

要追加,添加标志"-Append"。使用现有CSV文件的位置作为"-Path "的值。

$ Get-Process | Export-CSV -Append -Path /home/viktor/Desktop/processes.csv

选择要写入CSV的属性

让我们先快速看一下Get-Process的输出。

$ Get-Process

在这里,每一列都展示了关于当前运行的进程的某种类型的信息。每一列都代表相关进程的一个属性。到目前为止,我们一直在处理进程的所有属性(将它们转移到CSV文件中)。然而,并不是所有的属性对每一种情况都是必要的。

我们可以添加一个中间过滤器,只获得少数几个属性的选择。要做到这一点,我们要借助另一个cmdlet的帮助 选择-对象.

在下面的例子中,我们只输出进程名称(ProcessName)和ID(Id)。

$ Get-Process | Select-Object -Property ProcessName,ID | Export-CSV -NoTypeInformation -Path /home/viktor/Desktop/processes.csv

$ Get-Content /home/viktor/Desktop/processes.csv

不覆盖

如果不追加到现有文件,Export-CSV将默认覆盖现有文件。在许多情况下,这可能会导致重要的日志被无端删除。为了避免这种意外,我们可以告诉Export-CSV默认不覆盖现有文件。

要做到这一点,添加标志"-NoClobber"。

$ Get-Process | Export-CSV -NoClobber -Path /home/viktor/Desktop/processes.csv

正如你所看到的,它现在抛出一个错误,提到该文件已经存在。

覆写只读文件

默认情况下,只读文件不允许编辑。然而,我们可以使用PowerShell来强制编辑该文件。这个功能被直接嵌入到Export-CSV中。它的方法是将文件取消标记为只读,进行编辑,然后再次标记为只读。

要覆盖现有的只读文件,使用标志"-Force"。

$ Get-Process | Export-CSV -Append -Force -Path /home/viktor/Desktop/processes.csv

文件编码

对于文件编码,Export-CSV默认使用UTF-8。这是对所有文本文件的通用编码。然而,在特定情况下,不同的编码会更有意义。值得庆幸的是,Export-CSV支持定义特定的编码。

要指定一个特定的编码,使用标志"-Encoding"。

$ Get-Process | Export-CSV -Encoding -Path /home/viktor/Desktop/processes.csv

这里有一个所有支持的编码格式的列表。

ASCII Unicode UTF7 UTF8 UTF8BOM UTF8NoBOM UTF32 BigEndianUnicode 最后的想法

PowerShell中的Export-CSV cmdlet是一个强大的工具,可以将信息导出为CSV格式。本指南演示了Export-CSV的一些方法。它也可以在PowerShell脚本中实现,以实现数据传输的自动化。它将结构化数据转换为更简单和用户可读的格式,很多应用程序都可以使用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3