当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:如何将数组导出到 CSV 文件?

作者:精品下载站 日期:2024-12-14 16:02:23 浏览:14 分类:玩电脑

PowerShell:如何将数组导出到 CSV 文件?


PowerShell 是一种多功能脚本语言和命令行 shell,提供强大的自动化和管理功能。作为 PowerShell 用户,您可能会遇到需要将数组导出到 CSV 文件的情况。在这篇博文中,我们将探讨如何使用 PowerShell 将数组导出到 CSV(逗号分隔值)文件。 CSV 文件由于其简单性和兼容性而被广泛用于应用程序和平台之间的数据交换。在本文结束时,您将了解如何使用各种技术将数组导出到 CSV 文件。

了解 PowerShell 中的数组和 CSV 文件

数组是存储在单个变量中的元素的集合。数组中的每个元素都可以使用索引号进行访问。数组通常用于在 PowerShell 中存储数据,因为它们允许您将相关数据分组在一起并将其作为单个实体进行操作。

数组是存储在单个变量中的元素的集合。以下是如何创建简单数组的示例:


$Array = @(1, 2, 3, 4, 5)

CSV 文件是纯文本文件,以结构化格式存储表格数据。 CSV 文件中的每一行代表一条记录,每一列代表该记录中的一个字段。 CSV 文件通常用于在不同应用程序和数据库之间交换数据。

在 PowerShell 中可以通过多种方法将数组导出到 CSV 文件。在本文中,我们将介绍三种方法:Export-Csv cmdlet、使用 ForEach 循环的 Add-Content 以及使用 ForEach 循环的 Out-File。

方法 1:使用 Export-Csv Cmdlet

Export-Csv cmdlet 是将数组导出到 CSV 文件的最简单方法。此 cmdlet 将对象导出到 CSV 文件并将它们转换为一系列逗号分隔的值。这是一个例子:


$array = @(1, 2, 3, 4, 5)
$array | Export-Csv -Path "ArrayExport.csv" -NoTypeInformation

但是,对于简单数组,此方法将无法按预期工作

[玩转系统] PowerShell:如何将数组导出到 CSV 文件?

要使用 Export-Csv cmdlet,我们需要向其输入一个对象。具体做法如下:


$array = @(1, 2, 3, 4, 5)
$arrayObjects = $array | ForEach-Object { 
     [PSCustomObject]@{'Value' = $_} 
}
$arrayObjects | Export-Csv -Path "C:\Temp\ArrayExport.csv" -NoTypeInformation

同样,如果使用 PowerShell 导出字符串数组,CSV 将仅显示长度!


#String Array
$Array = @("apple", "orange", "banana", "kiwi")

#Export array to CSV
$Array | Export-CSV -Path "C:\Temp\Array.csv" -NoTypeInformation

输出 :


"Length"
"5"
"6"
"6"
"4"

[玩转系统] PowerShell:如何将数组导出到 CSV 文件?

这是因为 Export-Csv cmdlet 将对象作为输入并导出对象属性及其值的表。由于您的脚本正在生成字符串对象,并且它们唯一的属性是长度,这就是您所得到的。因此,为了解决这个问题,我们必须使用“Select-Object”cmdlet,它返回一个自定义 PSObject。


#String Array
$Array = @("apple", "orange", "banana", "kiwi")

#Convert Array to Object Array - using Select-Object cmdlet
$ObjArray = $Array | Select-Object @{Name='Name';Expression={$_}}

#Export Object Array to 
$ObjArray | Export-Csv "C:\Temp\ArrayExport.csv" -NoTypeInformation

使用 PowerShell 将数组导出为 CSV

在此示例中,我们创建一个名为 $Array 的数组,其中包含三个对象。每个对象都有三个属性:Name、Age、City(类似于多维数组)。我们使用 PSCustomObject 类来创建具有属性的自定义对象。获得数组后,您可以使用 Export-Csv cmdlet 将其导出到 CSV 文件。以下示例展示了如何将 $Array 数组导出到“C:\Temp”文件夹中名为 data.csv 的 CSV 文件:


#Define Array
$Array = @( [PSCustomObject]@{ Name = "John"; Age = 30; City = "New York" }, 
            [PSCustomObject]@{ Name = "Jane"; Age = 25; City = "Los Angeles" }, 
            [PSCustomObject]@{ Name = "Bob"; Age = 40; City = "Chicago" }
         )

#Export array to CSV
$Array | Export-Csv -Path "C:\Temp\data.csv" -NoTypeInformation

在此示例中,我们将 $Array 数组通过管道传输到 Export-Csv cmdlet。 -Path 参数指定 CSV 文件的路径和文件名。 -NoTypeInformation 参数可防止 PowerShell 将类型信息标头添加到 CSV 文件中。该脚本运行并在“C:\Temp”目录中创建一个名为 Data.csv 的新文件,其中包含 CSV 格式的数组数据。

[玩转系统] PowerShell:如何将数组导出到 CSV 文件?

导出具有特定列的数组

如果您的数组包含许多列,并且您只想导出这些列的子集,则可以使用 Select-Object cmdlet。例如,如果您有一个包含五列的数组,并且您只想导出前三列,则可以使用以下命令:


$Array | Select-Object Column1, Column2, Column3 | Export-Csv -Path "data.csv" -NoTypeInformation

从 PowerShell 将多个数组导出到 CSV

如何将多个数组导出到单个 CSV 文件还需要 Export-CSV cmdlet。我们通过使用 +(加号)符号连接数组内容来执行此任务。这是一个例子:


#Define Arrays
$Array1 = @(1,2,3,4)
$Array2 = @(5,6,7,8)
$Array3 = $Array1 + $Array2

$ResultArray = @()
#Convert Array to object
ForEach ($Item in $Array3)
{
    $ResultArray+=[pscustomobject]@{Result = $item }
}

#Export Array to CSV
$ResultArray | Export-Csv -Path "C:\Temp\Array.csv" -NoTypeInformation

在此示例中,我们创建两个数组($array1、$array2),将它们合并到 $Array3 中,并将生成的组合数组导出到 CSV 文件。

方法 2:通过 ForEach 循环使用 Add-Content

将数组导出到 CSV 文件的另一种方法是结合使用 Add-Content cmdlet 和 ForEach 循环。此方法允许您创建新文件或将数据附加到现有文件。这是一个例子:


#Define Array
$Array = @(1, 2, 3, 4, 5)
$CSVFile  = "C:\Temp\ArrayExport.csv"

#Remove the CSV if exists
If (Test-Path -Path $CSVFile) { Remove-Item -Path $CSVFile -Force}

#Set Header
$Header = "Value"
#Add Header to the CSV file
Add-Content -Path $CSVFile -Value $Header

#Add content to the CSV
ForEach ($Item in $Array) {
    Add-Content -Path $CSVFile -Value $Item
}

请注意,我们正在检查 CSV 文件是否存在并将其删除。这是因为默认情况下 Add-Content cmdlet 会附加到现有文件。

方法 3:将 Out-File 与 ForEach 循环结合使用

Out-File 是另一个可用于将数组导出到 CSV 文件的 cmdlet。此 cmdlet 将输出发送到文件而不是控制台。这是一个例子:


$array = @(1, 2, 3, 4, 5)
$header = "Value"
$header | Out-File -FilePath "C:\Temp\ArrayExport.csv"
ForEach ($item in $array) {
    $item | Out-File -FilePath "C:\Temp\ArrayExport.csv" -Append
}

结论

在这篇博文中,我们介绍了在 PowerShell 中将数组导出到 CSV 文件的三种方法:Export-Csv cmdlet、使用 ForEach 循环的 Add-Content 以及使用 ForEach 循环的 Out-File。每种方法都有其优点,您可以使用最适合您的要求的方法。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯