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

[玩转系统] 如何在 PowerShell 中导出为 CSV?

作者:精品下载站 日期:2024-12-14 21:42:38 浏览:14 分类:玩电脑

如何在 PowerShell 中导出为 CSV?


将数据导出到 CSV 文件是 PowerShell 中的一项常见任务,因为它可以轻松进行数据操作和分析。 CSV 易于阅读,并且可以在多个应用程序中打开,包括 Excel。无论您是要分析电子表格中的数据、将其导入数据库还是只是与同事共享,Export-CSV cmdlet 都提供了一种无缝的方式来以普遍认可的格式提取和保存数据。在本文中,我们将介绍使用 PowerShell 将数据导出到 CSV 文件的基础知识,包括如何从各种来源导出数据的示例。

PowerShell 和 CSV 导出简介

PowerShell 是一个功能强大的命令行工具,可让您自动执行任务并管理系统。它附带了各种 cmdlet,可帮助您与系统交互并根据您的要求执行操作。 CSV 代表逗号分隔值,一种简单的文件格式,用于以表格格式存储数据(文件中的每一行都是一行数据,分隔符逗号分隔每个值)。 CSV 文件可以在多个应用程序中打开,包括 Excel。使用 PowerShell 时,将数据导出到 CSV 是一项常见任务。它允许您以结构化格式存储数据并轻松与他人共享。

了解 Export-CSV cmdlet

PowerShell 提供 Export-CSV cmdlet,允许您将数据导出到 CSV。使用 PowerShell 将数据导出到 CSV 文件有很多好处,例如它允许您从不同来源(例如 Active Directory、Microsoft 365 服务或 SharePoint)提取有价值的信息,并将其保存为结构化格式以供进一步分析。 Export-CSV cmdlet 从管道获取输入并将其转换为 CSV 格式。 Export-CSV cmdlet 具有多个可用于自定义输出的参数。最常见的参数是 Path、NoTypeInformation 和 Delimiter。

Export-CSV cmdlet 的语法

Export-CSV cmdlet 的基本语法如下:


Export-Csv [-InputObject] PSObject[]> [-Delimiter Char>] [-NoClobber] [-UseCulture] [-Encoding String>] [-NoTypeInformation] [-Path String>] [-LiteralPath <String>] [-Force] [-Append] [-WhatIf] [-Confirm] [CommonParameters>]

Export-CSV cmdlet 提供了多个参数,可让您自定义输出并增强导出功能。让我们仔细看看一些最常用的参数:

Path

该参数指定要保存 CSV 文件的路径。它是必需参数,在使用 Export-CSV cmdlet 时必须提供。

NoTypeInformation

默认情况下,Export-CSV cmdlet 在输出文件中包含类型信息。但是,如果您想从 CSV 文件中排除此类型信息,可以使用 -NoTypeInformation 参数。

Append

-Append 参数允许您将 CSV 输出添加到指定文件的末尾,而不是替换其内容。当您想要合并多个 CSV 文件或使用新数据持续更新单个文件时,这会很有用。

Encoding

此参数允许您指定导出的 CSV 文件的编码。默认编码为 UTF-8,但您可以通过使用 -Encoding 参数后跟所需的编码值来选择不同的编码。

Delimiter

-Delimiter 参数允许您指定用于分隔 CSV 文件中的属性值的字符。默认情况下,使用逗号 (,) 作为分隔符,但您可以通过使用 -Delimiter 参数指定来选择不同的字符。

Force

指定是否覆盖 CSV 文件(如果已存在)。它还可用于不匹配的对象属性。

这些只是 Export-CSV cmdlet 可用的一些参数。探索和理解这些参数可以帮助您根据特定要求定制输出,并提高处理 CSV 文件时的效率。

示例:使用 PowerShell Export-Csv 导出数据

Export-Csv cmdlet 允许您将数据从对象导出到 CSV 文件。例如,要将数据从 Get-Process cmdlet 导出到“C:\Scripts\data.csv”文件,您可以使用以下命令:


Get-Process | Export-Csv -Path C:\Scripts\ProcessData.csv -NoTypeInformation

此命令将数据从 Get-Process cmdlet 导出到指定目录中的“ProcessData.csv”文件。 -Path参数指定CSV文件的位置,-NoTypeInformation参数用于去除导出数据中的类型信息,这样可以使生成的CSV文件更容易阅读。

[玩转系统] 如何在 PowerShell 中导出为 CSV?

类型信息头

默认情况下,Export-CSV cmdlet 在 CSV 输出中包含“#TYPE”行,它指定要导出的对象的类型。将 CSV 文件导入回 PowerShell 时,此行非常有用,因为它可以帮助 PowerShell 识别每个对象的类型。但是,如果您的 CSV 文件中不需要此类型信息,则可以使用 -NoTypeInformation 参数将其排除。


Get-EventLog -LogName Application -Newest 10 | Export-CSV "C:\PS\eventlog.csv" -NoTypeInformation

在此示例中,我们将应用程序事件日志中的 10 个最新条目导出到 CSV 文件,并从输出中排除类型信息。

将数据数组导出为 CSV

除了导出单个对象之外,Export-CSV cmdlet 还允许您将数据数组直接导出到 CSV 文件。当您有一组想要以表格格式保存的对象或数据时,这会很有用。

要将数据数组导出到 CSV 文件,只需将数组传递给 Export-CSV cmdlet,它就会将该数组转换为 CSV 字符串并将其保存到指定文件中。这是一个例子:


$users = Get-ADUser -Filter * -Properties Name, Email, Title
$users | Export-CSV -Path "C:\PS\users.csv" -NoTypeInformation

在此示例中,我们使用 Get-ADUser cmdlet 检索 Active Directory 用户列表。然后,我们将用户存储在 $users 变量中,并将其传递给 Export-CSV cmdlet 以将数据导出到 CSV 文件。通过包含我们感兴趣的属性(姓名、电子邮件、标题),使用 Get-ADUser cmdlet 的 -Properties 参数,我们可以仅选择导出的相关信息。

以下是将 SharePoint Online 列表项导出到 CSV 文件的真实示例:如何将 SharePoint Online 列表导出到 CSV?

将自定义对象数组导出到 CSV 文件

将数据导出到 CSV 文件的另一种方法是创建自定义对象并用所需的数据填充它们。此方法使您可以更灵活地构造导出的数据,并允许您在导出之前包含附加信息或执行计算。


$users = Get-AzureADUser | Select DisplayName, userprincipalname, Mail
$exportData = foreach ($user in $users) {
    [PSCustomObject]@{
        Name = $user.DisplayName
        Username = $user.userprincipalname
        Mail = $user.Mail
    }
}
$exportData
$exportData | Export-CSV "C:\Scripts\Users.csv" -NoTypeInformation

在此示例中,我们使用 Get-AzureADUser cmdlet 从 Azure Active Directory 导出用户数据。我们检索每个用户的 DisplayName 和 UPN 属性,并使用这些属性为每个用户创建一个自定义对象。最后,我们使用 Export-CSV cmdlet 将自定义对象导出到 CSV 文件。

[玩转系统] 如何在 PowerShell 中导出为 CSV?

下面是如何使用 Export-Csv cmdlet 在 PowerShell 中将数据导出到 CSV 文件的示例:


$data = @(
    [PSCustomObject]@{
        Name = 'John'
        Age = 30
        City = 'New York'
    },
    [PSCustomObject]@{
        Name = 'Jane'
        Age = 25
        City = 'Chicago'
    }
)

$data | Export-Csv -Path 'C:\Data\export.csv' -NoTypeInformation

这将在指定路径 C:\Data 中创建一个名为 export.csv 的 CSV 文件,其中包含以下内容:


Name,Age,City
John,30,New York
Jane,25,Chicago

请注意,-NoTypeInformation 参数用于防止 PowerShell 将类型信息添加到 CSV 文件的第一行。如果您希望将简单数组导出到 CSV,请参阅:如何在 PowerShell 中将数组导出到 CSV?

PowerShell 导出包含特定列的 CSV

有时,您可能只想将特定列导出到 CSV 文件。您可以使用 Select-Object cmdlet 仅选择要导出的列。您可以通过以下方法实现此目的:使用 Get-Service cmdlet 检索服务列表,使用 Select-Object cmdlet 选择所需的属性,然后将输出通过管道传输到导出 CSV cmdlet。这是一个例子:


Get-Service | Select-Object Name, DisplayName, Status | Export-CSV -Path "C:\PS\services.csv" -NoTypeInformation

在此示例中,Get-Service cmdlet 检索系统上所有 Windows 服务的列表。然后,我们使用 Select-Object cmdlet 选择要包含在 CSV 文件中的属性(在本例中为“名称”、“显示名称”和“状态”)。最后,我们将输出通过管道传输到 Export-CSV cmdlet,并使用 -Path 参数指定要保存文件的路径。

过滤和排序数据并导出为 CSV

您还可以根据特定条件对数据进行过滤和排序。 PowerShell 为这些目的提供了Where-Object 和Sort-Object cmdlet。


#Filter
$FilteredData = Get-Service| Where-Object { $_.Status -eq "Running" }

#Sort
$SortedData = $FilteredData | Sort-Object Name

#Export Data
$SortedData | Export-CSV -Path "C:\PS\services.csv" -NoTypeInformation

在此示例中,我们过滤导入的 CSV 数据,仅包含 Status 属性等于“Running”的行。

导出带有标题的数据

默认情况下,Export-CSV cmdlet 在 CSV 文件中包含一个标题行,其中属性名称作为列标题。但是,如果您正在处理没有标题的数据,或者想要自定义标题,则可以使用 -Header 参数指定自定义标题行。


Get-Process | Select-Object Name, CPU, Memory | Export-CSV "C:\PS\processes.csv" -NoTypeInformation -Header "Process Name", "CPU Usage", "Memory Usage"

在此示例中,我们将有关正在运行的进程的信息导出到 CSV 文件,并提供具有更具描述性的列名称的自定义标题行。生成的逗号分隔文件将具有指定的标题行,后跟数据行。

从 CSV 文件中删除标头

将 Excel 文件转换为 CSV 格式时,生成的 CSV 文件包含 Excel 文件中的标题。但是,在某些情况下,我们可能希望从 CSV 文件中排除标头。为此,我们可以利用 PowerShell 的管道功能和 Select-Object cmdlet。

以下是从 CSV 文件中删除标头的示例脚本:


# Import the CSV file
$data = Get-Content -Path "C:\Scripts\UsersData.csv"

# Remove the first row (headers)
$data = $data | Select-Object -Skip 1

# Export the modified data to a new CSV file
Set-Content "C:\Scripts\UsersData.csv"

在此脚本中,我们首先使用 Get-Content cmdlet 导入 CSV 文件。接下来,我们使用带有 -Skip 参数的 Select-Object cmdlet 从数据中排除第一行(标题)。最后,我们使用 Set-Content cmdlet 将修改后的数据导出到新的 CSV 文件。

在 CSV 值中使用引号(仅限 PowerShell 7)

将数据导出到 CSV 文件时,您可能会遇到包含特殊字符的值,例如逗号或双引号。为了处理这些情况,Export-CSV cmdlet 提供了 -UseQuotes 参数,该参数允许您指定如何在 CSV 值中使用引号。


Get-Service | Export-CSV "C:\Scripts\Service-output.csv" -NoTypeInformation -UseQuotes AsNeeded

在此示例中,我们使用 Get-Service cmdlet 导出服务数据。我们将 -UseQuotes 参数指定为 AsNeeded,这指示 PowerShell 仅当 CSV 值包含特殊字符时才使用引号。这可确保导出的 CSV 文件保持正确的格式,并且可以由其他应用程序正确解析。

使用不同分隔符导出数据

默认情况下,Export-CSV cmdlet 使用逗号作为分隔符。但是,如果需要,您可以使用不同的分隔符。要使用不同的分隔符,可以使用 -Delimiter 参数。例如,假设您的系统中有一个员工列表,并且您希望将他们的姓名和电子邮件地址导出到以分号作为分隔符的 CSV 文件中。


Get-ADUser -Filter * -Properties Name, EmailAddress | Select-Object Name, EmailAddress | Export-CSV -Path "C:\Employees.csv" -NoTypeInformation -Delimiter ";"

在上面的示例中,我们使用 Get-ADUser cmdlet 从 Active Directory 获取员工列表。然后,我们使用 Select-Object cmdlet 仅选择 Name 和 EmailAddress 属性。最后,我们使用 Export-CSV cmdlet 将数据导出到以分号作为分隔符的 CSV 文件。

例如,如果要使用制表符作为分隔符,可以如下指定:


Get-Process | Export-CSV -Path "C:\Scripts\processes.csv" -NoTypeInformation -Delimiter "`t"

在此示例中,-Delimiter ‘`t 参数指示 PowerShell 使用“tab”作为分隔符而不是默认的逗号。

使用不同的编码导出数据

Export-CSV cmdlet 还允许您使用 -Encoding 参数指定导出的 CSV 文件的编码。默认编码为 UTF-8,该编码得到广泛支持,可以处理各种字符集。但是,如果需要,您可以选择不同的编码。例如,如果要使用UTF-16、ASCII、OEM、Unicode等,可以如下指定:


Get-Process | Export-CSV -Path "C:\PS\processes.csv" -NoTypeInformation -Encoding UTF16

在此示例中,-Encoding UTF16 参数指示 PowerShell 对导出的文件使用 UTF-16 编码。

将多个对象导出到单个 CSV 文件

您可以使用 Export-CSV cmdlet 将多个对象导出到单个 CSV 文件。例如,假设您的系统中有员工和订单列表,并且您希望将它们导出到单个 CSV 文件。


$employees = Get-ADUser -Filter * -Properties Name, EmailAddress 
$orders = Get-Order -Filter *
$employees, $orders | Export-CSV -Path "C:\Data.csv" -NoTypeInformation

在上面的示例中,我们使用 Get-ADUser cmdlet 从 Active Directory 获取员工列表。我们还使用 Get-Order cmdlet 从我们的系统获取订单列表。然后我们使用逗号运算符组合两个列表。最后,我们使用 Export-CSV cmdlet 将数据导出到单个 CSV 文件。

附加到现有 CSV 文件

在某些情况下,您可能需要将新数据添加到现有 CSV 文件而不覆盖其内容。 Export-CSV cmdlet 提供了 -Append 参数来实现此目的。当您想要定期更新 CSV 文件或将多组数据合并到一个文件中时,这特别有用。


$additionalData = Get-Service | Select-Object Name, DisplayName, StartType
$additionalData | Export-CSV "C:\PS\services.csv" -NoTypeInformation -Append

在此示例中,我们检索有关服务的其他数据并将其附加到现有的“C:\PS\services.csv”文件中。 -Append 参数确保将新数据添加到文件末尾,而不替换现有内容。

使用过滤器将数据导出到 CSV

您可以使用过滤器仅导出满足特定条件的数据。例如,假设您的系统中有一个员工列表,并且您只想导出在 IT 部门工作的员工。


Get-ADUser -Filter {Department -eq "IT"} -Properties Name, EmailAddress | Select-Object Name, EmailAddress | Export-CSV -Path "C:\IT-Employees.csv" -NoTypeInformation

在上面的示例中,我们使用 Get-ADUser cmdlet 从 Active Directory 中获取在 IT 部门工作的员工列表。然后,我们使用 Select-Object cmdlet 仅选择 Name 和 EmailAddress 属性。最后,我们使用 Export-CSV cmdlet 将数据导出到 CSV 文件。

使用多个命令将数据导出到 CSV

您可以使用多个命令将数据导出到 CSV。当您想要在导出数据之前执行某些操作时,这非常有用。例如,假设您的系统中有一个订单列表,并且您希望将它们导出到包含总金额的 CSV 文件中。


$orders = Get-Order -Filter * $orders | Select-Object OrderNumber, Customer, @{Name="Total";Expression={$_.Price * $_.Quantity}} | Export-CSV -Path "C:\Orders.csv" -NoTypeInformation

在上面的示例中,我们使用 Get-Order cmdlet 从系统中获取订单列表。然后,我们使用 Select-Object cmdlet 选择 OrderNumber、Customer 和 Total 属性。 Total 属性是根据 Price 和 Quantity 属性计算的。最后,我们使用 Export-CSV cmdlet 将数据导出到 CSV 文件。

使用 Out-File 导出数据

将数据导出到 CSV 文件的另一种方法是使用 Out-File cmdlet,它允许您将输出重定向到文件。例如,要将数据从 Get-Process cmdlet 导出到“data.csv”文件,您可以使用以下命令:


Get-Process | ConvertTo-Csv -NoTypeInformation | Out-File "C:\Scripts\ProcessData.csv"

此命令将数据从 Get-Process cmdlet 导出到当前目录中的 CSV 输出文件“ProcessData.csv”。 ConvertTo-Csv cmdlet 用于在导出数据之前将数据转换为 CSV 格式。 -NoTypeInformation 参数用于从导出的数据中删除类型信息,这可以使生成的 CSV 文件更易于阅读。

将多个数据源导出到单个 CSV

在某些情况下,您可能需要将多个源的数据合并到一个 CSV 文件中。您可以使用 ForEach-Object cmdlet 和 -Append 参数以及 Export-Csv 来执行此操作。假设您有一个服务器名称列表,并且想要将每个服务器上正在运行的进程的信息导出到单个 CSV 文件:


$serverList = "Server1", "Server2", "Server3"

$serverList | ForEach-Object {
    Get-Process -ComputerName $_ | Export-Csv -Path .\AllServersProcesses.csv -Append
}

此脚本将创建一个名为“AllServersProcesses.csv”的 CSV 文件,其中包含有关 $serverList 数组中所有服务器上正在运行的进程的信息。

使用 PowerShell 导出到 CSV 的最佳实践

为了确保在 PowerShell 中处理 CSV 文件时顺利高效的工作流程,遵循一些最佳实践非常重要。以下是一些可帮助您充分利用 Export-CSV cmdlet 的提示:

  • 始终在 CSV 文件中包含标题。
  • 使用数据中不存在的分隔符。
  • 对 CSV 文件使用 UTF8 编码。
  • 使用过滤器仅导出满足特定条件的数据。
  • 在导出数据之前使用多个命令执行某些操作。

需要排除的常见错误

以下是使用 PowerShell 将数据导出到 CSV 时可能遇到的一些常见错误以及如何解决这些错误:

  • “无法将“System.Object[]”类型的“System.Object[]”值转换为“System.String”类型。”当您尝试导出包含复杂属性的对象数组时,会发生此错误。要修复此错误,请使用 Select-Object cmdlet 仅选择要导出的属性。
  • “该进程无法访问该文件,因为该文件正在被另一个进程使用。”当 CSV 文件已在另一个应用程序中打开时,会出现此错误。关闭其他应用程序中的文件,然后重试。
  • “找不到路径‘C:\Users.csv’,因为它不存在。”当 CSV 文件的路径不正确时,会出现此错误。仔细检查路径并重试。

数据导出脚本中的错误处理和日志记录

使用 PowerShell 脚本导出数据时,重要的是要包含错误处理和日志记录机制,以确保数据导出过程的可靠性和可追溯性。 PowerShell 提供了各种错误处理和日志记录技术,例如 try-catch 块和脚本日志记录。


try {
    # Data export logic here
    # ...
    $data | Export-CSV "C:\Path\to\output.csv" -NoTypeInformation
}
catch {
    # Error handling and logging logic here
    # ...
    Write-Error $_.Exception.Message
    $_.Exception | Out-File "C:\Path\to\error.log" -Append
}
finally {
    # Cleanup and finalization logic here
    # ...
}

在此示例中,我们将数据导出逻辑包装在 try-catch 块中以捕获潜在的错误。在 catch 块中,我们通过使用 Write-Error 将错误消息写入控制台并将异常详细信息附加到错误日志文件来处理错误。 “Finally”块用于需要执行的任何清理或终结任务,例如关闭连接或释放资源。

包起来

使用 PowerShell 时,将数据导出到 CSV 是一项常见任务。无论您使用的是 Active Directory、Microsoft 365、SharePoint 还是任何其他数据源,Export-CSV cmdlet 都允许您将 PowerShell 对象转换为表格格式并保存它们以供进一步分析或共享。在本文中,我们介绍了使用 PowerShell 将数据导出到 CSV 的各个方面,包括语法、特定列、标题、分隔符、编码、筛选器和故障排除错误。通过遵循本文中提供的示例,您应该能够将数据从各种来源导出到 CSV 文件以进行进一步分析和操作。如果您有任何问题或意见,请随时在下面留下。快乐的脚本编写!

经常问的问题:

如何在 PowerShell 中将 AD 用户列表导出为 CSV?

要使用 PowerShell 将 Active Directory (AD) 用户列表导出到 CSV 文件,您可以使用 Get-ADUser cmdlet 和 Export-Csv cmdlet。以下是您可以使用的 PowerShell 命令的示例:

Get-ADUser -Filter * | Select-Object Name, SamAccountName, EmailAddress | Export-Csv -Path "C:\Path\to\output.csv"

如何在 PowerShell 中创建并附加 CSV 文件?

要在 PowerShell 中创建并附加 CSV 文件,您可以使用 Export-Csv cmdlet。首先,您需要创建一个包含所需数据的对象,然后使用 Export-Csv cmdlet 将其导出到 CSV 文件。如果要将数据附加到现有 CSV 文件,可以使用 -Append 参数将其附加到现有文件。

如何在 PowerShell 脚本中将输出导出到 CSV?

要将输出导出到 PowerShell 中的 CSV 文件,您可以使用 Export-Csv cmdlet。以下是如何执行此操作的示例:

#Export the list of processes to a CSV file
Get-Process | Export-Csv -Path .\Processes.csv -NoTypeInformation

如何在 PowerShell 中将 CSV 转换为 XLSX?

要使用 PowerShell 将 CSV 文件转换为 XLSX 格式,您可以使用“Import-Csv”和“Export-XLSX”cmdlet。以下是您可以使用的代码示例:
步骤 1. 安装“PSExcel”模块

Install-Module -Name PsExcel
Step 2. Convert the CSV file to an XLSX file
#Import the CSV file
$data = Import-Csv -Path .\YourData.csv
#Export the data to an XLSX file
$data | Export-XLSX -Path "C:\Scripts\Users.xlsx"

You can also use the “Export-Excel” cmdlet from the “ImportExcel” module.

How do I get the contents of a CSV file in PowerShell?

To get the contents of a CSV file in PowerShell, you can use the Import-Csv cmdlet. This cmdlet reads the contents of a CSV file and creates custom objects from the data. Here’s an example of how to use it:
$data = Import-Csv -Path "C:\temp\data.csv"

如何在 PowerShell 中将 JSON 导出为 CSV?

您可以使用 PowerShell 中的 ConvertFrom-Json cmdlet 将 JSON 文件转换为 PowerShell 对象,然后使用 Export-Csv cmdlet 将这些对象导出到 CSV 文件。这是一个例子:

#Import the JSON file
$jsonData = Get-Content -Path "C:\Temp\data.json" | ConvertFrom-Json
#Export the data to a CSV file
$jsonData | Export-Csv -Path "C:\Temp\data.csv" -NoTypeInformation

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

取消回复欢迎 发表评论:

关灯