在PowerShell中操作导入的csv数据

时间:2016-04-28 18:30:28

标签: csv powershell

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

NetSuite为我提供了一个csv文件,其中包含电子邮件和经理作为2列标题。 电子邮件 - 包含员工电子邮件地址,经理包含最后一种格式的经理名称。

我想将这两列转换为可在

中使用的数据
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导出到新csv 4.来自新csv的Set-AdUser -Manager的PowerShell脚本

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

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

修改

我已经找到了目标1 现在我需要做的就是采取" Last,First"列中的数据并将其更改为" First.Last"

编辑2 - 这似乎并不安静......

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

1 个答案:

答案 0 :(得分:0)

你可以尝试:

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