【问题标题】:manipulate imported csv data in PowerShell在 PowerShell 中操作导入的 csv 数据
【发布时间】:2016-04-28 18:30:27
【问题描述】:

我有一个从外部源 (NetSuite) 自动生成的 csv 文件 我希望使用 csv 文件中的数据来更新 Active Directory 用户帐户以添加或更新“经理”

NetSuite 为我提供了一个 csv 文件,其中包含电子邮件和管理器作为 2 个列标题。 电子邮件 - 包含员工的电子邮件地址,经理包含采用 Last,First 格式的经理姓名。

我想把这两列都转换成可以用的数据

Set-AdUser -Identity user.name -manager first.last

目标 1 是从电子邮件地址列中删除 @domain 目标 2 是将 Last, First 重新排序为 first.last

Import-Csv c:\test.csv

Email | Supervisor
user.1@test.com | "Number1, Manager"
user.2@test.com | "Number2, Manager"

我希望能够将其导出为如下所示的 csv 文件

Email   |  Supervisor
user.1  |  Manager.Number1
user.2  |  Manager.Number2

所以我想在 AD 中自动化 Employee - Manager 字段的工作流程是: 1. NetSuite 定时导出 csv 文件 2. PowerShell 脚本用于导入 NetSuite csv 并按所述编辑数据。 3. 将可用数据导出到新的 csv 4. 从新的 csv 到 Set-AdUser -Manager 的 PowerShell 脚本

我寻求指导的只是第 2 步和第 3 步

这可能吗?如果我自己解决这个问题,我会更新。

编辑

我已经弄清楚了目标 1 现在我需要做的就是从列中获取“Last, First”数据并将其更改为“First.Last”

edit 2 - 这似乎不能安静地工作......

$txt = import-csv .\book1.csv | % {
  $_.Email = $_.Email -replace "@test.com", ""
  $_
}
export-csv -InputObject $txt -NoTypeInformation .\newbook1.csv

【问题讨论】:

  • 欢迎来到 StackOverflow,在此之前您可能需要阅读 how to ask a question。提供一些上下文来解释您需要什么,到目前为止您尝试了什么,以及为什么它没有按预期工作(即:错误消息等)。还可以考虑花时间格式化您的问题,以便读者容易理解。您可能需要编辑您的问题,以包括您在上面的 cmets 上发布的说明。
  • 谢谢纳乔。我试图提供一些上下文。并将我的解决方案代码移动到 sn-p
  • 搜索 -split-join 运算符
  • 你的 csv 文件中的分隔符是什么。我认为它应该是一个逗号。那么您的 csv 中的值如何在 manager 列中包含逗号。请在您的问题中粘贴确切的源 csv 内容。

标签: csv powershell


【解决方案1】:

你可以试试:

Import-Csv -Path .\book1.csv | ForEach-Object {
  #Remove @AndEverthingThatFollows
  $_.Email = $_.Email -replace "@.*$"
  #Replace "LastName, FirstName" (space optional) with FirstName.Lastname    
  $_.Supervisor = $_.Supervisor -replace '(\w+),\s*?(\w+)', '$2.$1'
} | Export-Csv -NoTypeInformation -Path .\newbook1.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多