Powershell CSV импорт в HTML в таблице

0

Я пытаюсь преобразовать 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"
Клаус Б
источник
Обычно этот вопрос лучше подходит для StackOverflow, поскольку на самом деле он не входит в сферу полномочий суперпользователя. Обычно вы найдете некоторую информацию о том, что по теме для Exchange в разделе справки. Если вы еще этого не сделали, возможно, не торопитесь, чтобы прочитать некоторые из них, например, как спросить раздел. Это поможет вам получить лучшие и, возможно, более быстрые ответы.
Сет

Ответы:

0

Вы никогда ничего не назначаете $Report. Вам нужно будет выполнить преобразование HTML в цикле. В настоящее время вы просматриваете каждый элемент, перезаписываете $firstNameи $lastNameс каждой итерацией. Вы заканчиваете цикл и имеете последнее значение в нем, чтобы использовать его для конечного результата.

Чтобы привести пример:

Предположим, вы хотите суммировать числа от одного до десяти, используя цикл. То, что вы сейчас делаете, это то, что следует.

$numbers = 1..10
$sum = 0
foreach($number in $numbers){
    $sum = $number
}
Write-Output $sum

Вы присваиваете сумму, которая у вас в данный момент есть, чтобы быть суммой. Что вы действительно хотите сделать в этом случае, так это добавить сумму к каждой итерации.

$numbers = 1..10
$sum = 0
foreach($number in $numbers){
    $sum = $sum + $number
}
Write-Output $sum

Что это значит для вашего кода? Вам нужно сгенерировать свой HTML внутри цикла. Ваш подход передачи выходных данных цикла foreach $repotпеременной может фактически использоваться для этого. В настоящее время он не генерирует никаких выходных данных, потому что вы просто выполняете присваивание (что, мы надеемся, не приведет к ошибке). Следующая модификация даст вам строку с выводом каждого имени и фамилии для каждого элемента. Вы можете использовать это для генерации вашего HTML. Альтернативный подход был бы аналогичным, используя $reportв качестве суммы добавление к ней каждой итерации.

$Report = ForEach ($item in $users)
{
    $firstName = $item.(“fornavn”)
    $lastName = $item.(“efternavn”)

    Write-Output $firstname,$lastName
}

PS имейте ввиду, что foreach и ForEach-Object это разные вещи. Вероятно, вы столкнетесь с последним чаще, особенно если вы используете сокращение %. Одним из основных отличий является то, что вы не можете использовать continueили breakвнутри последнего, но вместо этого нужно будет использовать другой механизм, как return.

Сет
источник