如何在 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"
我正在尝试编写一个脚本,该脚本将采用现有的 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"