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

[玩转系统] 如何在 PowerShell 中使用 Export-CSV

作者:精品下载站 日期:2024-12-14 03:41:01 浏览:13 分类:玩电脑

如何在 PowerShell 中使用 Export-CSV


使用 PowerShell,您可以从 Active Directory 或 Microsoft 365 等服务中提取各种信息。但有时您需要在 Excel 或其他系统中进一步处理这些信息。为此,我们可以使用 PowerShell 中的 Export-CSV 函数。

Export-CSV 函数将 PowerShell 对象转换为 CSV 字符串并将其保存到 CSV 文件中。如果您只需要 CSV 字符串,那么您还可以使用 PowerShell 中的 ConvertTo-CSV 函数。

在本文中,我们将了解如何使用 Export-CSV 功能、如何防止常见错误以及可以使用哪些不同选项。

PowerShell 导出-CSV

Export-CSV cmdlet 非常简单,只有一些有用的属性:

  • 路径 - (必需)CSV 文件的位置
  • NoTypeInformation - 从输出中删除类型信息标头。 PowerShell 6 中不再需要
  • 分隔符 - 默认为逗号,但您可以更改它
  • 追加 - 追加到现有 CSV 文件
  • Force - 与 Append 结合使用很有用
  • NoClobber ——不覆盖现有文件
  • UseQuotes -(仅限 PowerShell 7)是否将值括在引号中

我们将从简单的事情开始,将 Microsoft 365 用户导出到 CSV 文件。我将在此处的整个示例中使用 Azure AD,因此如果您想继续操作,请确保先连接 Azure AD。

Get-AzureADUser cmdlet 返回 Microsoft 365 租户中的所有用户,如下面的屏幕截图所示。我们要做的是将输出导出到 CSV 文件。为此,我们可以简单地在其后面传递 Export-CSV cmdlet:

[玩转系统] 如何在 PowerShell 中使用 Export-CSV

Get-AzureADUser | Export-Csv c:\temp\azureadusers.csv -NoTypeInformation

听起来很容易,对吧?如果您打开 CSV 文件,您会注意到我们得到的内容比我们需要的多一点,而不是我们之前在 PowerShell 中看到的漂亮列表。

[玩转系统] 如何在 PowerShell 中使用 Export-CSV

那么为什么会发生这种情况呢? Export-CSV cmdlet 从 Get-AzureADUser cmdlet 导出所有单个对象。如果我们查找单个 Azure AD 用户,那么您可以看到从单个用户对象返回的所有数据:

 Get-AzureADUser -Filter "Displayname eq 'Rudy Mens'" | select *

[玩转系统] 如何在 PowerShell 中使用 Export-CSV

如何使用 Export-CSV 导出正确的信息

在将用户对象导出到 CSV 文件之前,我们需要首先选择所需的正确信息(属性)。

Get-AzureADUser | select userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformation

这将在一个我们可以实际使用的漂亮 CSV 文件中返回每个用户的选定字段:

[玩转系统] 如何在 PowerShell 中使用 Export-CSV

使用 PowerShell 附加到 CSV 文件

在某些情况下,您可能需要使用 PowerShell 将信息附加到 CSV 文件。假设我们要将每个用户的经理添加到列表中。有一种更有效的方法可以做到这一点,但在本例中,我们将循环遍历所有用户并从 Azure AD 获取管理器。

建议

在此完整指南中了解有关创建 PowerShell 脚本的更多信息

在此示例中,我们创建一个自定义 PowerShell 对象,该对象将保存用户信息和经理。使用 -append 开关,我们可以将用户添加到 CSV 文件中。

$users = Get-AzureADUser

$users | ForEach-Object {
    $Manager = Get-AzureADUserManager -ObjectId $_.ObjectId
    
    $user =[pscustomobject]@{
        'Displayname' = $_.displayname
        'Jobtitle' = $_.jobtitle
        'Department' = $_.Department
        'Manager' = $manager.displayname
    }
    $user | Export-CSV c:\temp\usermanager.csv -Append -NoTypeInformation -Force
}

我还添加了 -Force 开关。这样,如果 CSV 文件不存在,则会创建该文件,并且属性不匹配的对象仍然可以写入 CSV 文件。它只会写入匹配的属性,其他属性将被丢弃。

PowerShell 中其他有用的 Export-CSV 参数

在 PowerShell 中使用 Export-CSV cmdlet 时,还有一些其他参数非常有用。

无破坏者

默认情况下,Export-CSV cmdlet 在使用时将覆盖任何现有文件。如果您不想这样做,则可以添加 -NoClobber 参数。这样,如果文件已经存在,您将收到错误消息,从而阻止您覆盖该文件。

[玩转系统] 如何在 PowerShell 中使用 Export-CSV

分隔符

逗号分隔值文件 (CSV) 中的值默认用逗号分隔。并非所有应用程序都遵循此标准。因此,当您需要将数据导入到另一个需要分号 (;) 的应用程序时,您可以更改分隔符。

确保将新分隔符用引号引起来:

Get-AzureADUser | Select-Object -Property userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformation -Delimiter ';'

使用引号

当您在 PowerShell 5 或 6 中导出对象时,所有值都会用引号引起来。在某些情况下,您可能不希望这样。如果您使用的是 PowerShell 7,则可以使用 -UseQuotes 参数。

该参数有几个选项:

  • 按需
  • 始终(默认)
  • 绝不
 Get-Process | export-csv -Path c:\temp\process.csv -UseQuotes AsNeeded

总结

Export-CSV cmdlet 是我经常使用的 PowerShell 函数。快速从 Microsoft 365 中提取数据以用于报告或其他任务确实非常有用。确保在导出对象时首先选择正确的属性。这是将 PowerShell 数据导出到 Excel 时最常犯的错误。

如果您有任何疑问,请在下面发表评论。

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

取消回复欢迎 发表评论:

关灯