Я пытаюсь преобразовать 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"

2 ответа2

0

Извините за мои глупые вопросы

Но теперь я могу напечатать все строки через запись-вывод, но я не могу заставить работать вывод html, не могли бы вы помочь мне в правильном направлении?

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .