У меня есть цикл foreach в PowerShell. Он проходит через некоторых пользователей, перемещающих данные на основе файла CSV.
Я хотел бы обновить файл CSV для каждой запущенной строки, поэтому CSV выглядит следующим образом:
Username;OldData;NewData;Status User1;c:\Old;c:\new;Waiting User2;d:\Old;D:\New;Waiting
Будет ли последняя строка в первом цикле foreach (при условии, что данные были скопированы) изменит CSV на:
Username;OldData;NewData;Status User1;c:\Old;c:\new;Done User2;d:\Old;D:\New;Waiting
И снова после того, как User2 закончит обновлять его до:
Username;OldData;NewData;Status User1;c:\Old;c:\new;Done User2;d:\Old;D:\New;Done
Что я делаю сейчас, так это импортирую CSV с помощью
$Table = Import-Csv c:\csv.csv
а затем запустите foreach (псевдокод)
foreach ($Row in $Table) {
Copy-Content $row.OldData $row.NewData
Update-Csv $row.Status = "Done"
}





Следуя подсказке @AnsgarWiechers, сохраните измененную таблицу $Table с
$Table | Export-Csv C:\csv.csv -NoTypeInformation
Чтобы избежать обработки одной и той же строки несколько раз при последовательных запусках, исключите строки со статусом Done.
## Q:\Test\2019\06\07\SO_56495983.ps1
$File = '.\csv.csv' # 'c:\csv.csv' #
$Table = Import-Csv $File -Delimiter ';'
foreach ($Row in ($Table|Where Status -eq 'Waiting')) {
#Copy-Content $row.OldData $row.NewData
$row.Status = "Done"
}
$Table
$Table | Export-Csv $File -Delimiter ';' -NoTypeInformation
Так что это не испортит цикл to, изменяющий активную таблицу, за которой он работает? - делаем «$row.Status = «Готово»»
Я упустил из виду недостающее -Delimiter ';'. Теперь должно работать, как ожидалось.
Удалить
Update-Csv.