Я пытаюсь преобразовать CSV-файл в HTML с Powershell. Он занимает только последнюю строку в файле CSV, а не все строки.
Я новичок в PowerShell, поэтому надеюсь, что кто-то может мне помочь
$users = import-csv “C:\fso\names.csv”
$Report = ForEach ($item in $users)
{
# I like to assign each property value to a simpler named variable, but it’s not necessary
$firstName = $item.(“fornavn”)
$lastName = $item.(“efternavn”)
}
$Report | ConvertTo-Html -Head $css -Body "<h1>Adresseliste</h1>`n<h5>Generated on $(Get-Date)</h5><table><tr><td><p>$firstname<p><td><p>$lastname</p></td></td></tr></table>" | Out-File "C:\fso\test.html"
powershell
html
csv
Клаус Б
источник
источник
Ответы:
Вы никогда ничего не назначаете
$Report
. Вам нужно будет выполнить преобразование HTML в цикле. В настоящее время вы просматриваете каждый элемент, перезаписываете$firstName
и$lastName
с каждой итерацией. Вы заканчиваете цикл и имеете последнее значение в нем, чтобы использовать его для конечного результата.Чтобы привести пример:
Предположим, вы хотите суммировать числа от одного до десяти, используя цикл. То, что вы сейчас делаете, это то, что следует.
Вы присваиваете сумму, которая у вас в данный момент есть, чтобы быть суммой. Что вы действительно хотите сделать в этом случае, так это добавить сумму к каждой итерации.
Что это значит для вашего кода? Вам нужно сгенерировать свой HTML внутри цикла. Ваш подход передачи выходных данных цикла foreach
$repot
переменной может фактически использоваться для этого. В настоящее время он не генерирует никаких выходных данных, потому что вы просто выполняете присваивание (что, мы надеемся, не приведет к ошибке). Следующая модификация даст вам строку с выводом каждого имени и фамилии для каждого элемента. Вы можете использовать это для генерации вашего HTML. Альтернативный подход был бы аналогичным, используя$report
в качестве суммы добавление к ней каждой итерации.PS имейте ввиду, что foreach и ForEach-Object это разные вещи. Вероятно, вы столкнетесь с последним чаще, особенно если вы используете сокращение
%
. Одним из основных отличий является то, что вы не можете использоватьcontinue
илиbreak
внутри последнего, но вместо этого нужно будет использовать другой механизм, какreturn
.источник