如何在 foreach 循环中使用 Powershell 写入 CSV 中的一个条目

How to write to one entry in a CSV with Powershell in foreach loop

我正在尝试编写一个脚本,该脚本将采用现有的 CSV 文件,“部门”列为空列,并且对于每一行,使用该行中存在的电子邮件地址进行反向查找该用户在 Active Directory 中的部门,然后将该部门值写入“部门”列中的行。

目前,我可以读取 CSV、获取电子邮件、获取部门,但我不知道如何将该行的“部门”值更改为存储在 $department 变量中的值。

Import-Module ActiveDirectory

$CSVfile = Import-CSV "C:\Users\abcdefg\temp\fieldstaffreport.csv" -Header "training", "fname", "lname", "email", "department", "group", "completion", "url", "date1", "date2"


$CSVfile = foreach ($i in $CSVfile) {
    $email = $i.Email
    $department = Get-ADUser -filter "EmailAddress -eq '$email'" -property department | select -expandproperty department
    Write-Host($i.Email + ", " + $department) -NoNewline
    $i.department= $department
}

$CSVfile | Export-CSV "C:\Users\abcdefg\temp\output.csv"

我相信我写 $i.department = $department 的第 10 行应该更改值。此脚本使用 foreach 循环遍历 CSV 中的每一行。

有人可以告诉我我做错了什么吗?我已经用尽了所有与此相关的指南和文章,但我不明白为什么这不起作用。

write-host 输出完美无缺,显示了电子邮件地址,然后是来自 AD 的部门值,以逗号分隔。它与实际用户数据和所有内容都正确对齐。

谢谢

你能检查一下吗?

[array]$CSVfile = Import-CSV "C:\Users\abcdefg\temp\fieldstaffreport.csv" -Header "training", "fname", "lname", "email", "department", "group", "completion", "url", "date1", "date2"


for($i=0; $i -ne $CSVfile.count; $i++) {
    $email = $CSVfile[$i].Email
    $department = Get-ADUser -filter "EmailAddress -eq '$email'" -property department | select -expandproperty department
    Write-Host($CSVfile[$i].Email + ", " + $department) -NoNewline
    $CSVfile[$i].department= $department
}

$CSVfile | Export-CSV "C:\Users\abcdefg\temp\output.csv"