Powershell CSV 导入到表中的 html

Powershell CSV 导入到表中的 html

我尝试使用 Powershell 将 csv 文件转换为 html。它仅获取 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"

答案1

您实际上从未将任何东西分配给$Report。您需要在循环内进行 HTML 转换。目前,您循环遍历每个项目并在每次迭代中覆盖$firstName$lastName。您完成循环并将最后一个值用于最终输出。

举个例子:

假设您想使用循环对 1 到 10 的数字求和。您当前正在执行的操作如下。

$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请注意foreachForEach 对象是不同的东西。您可能会更经常遇到后者,尤其是当您使用简写时%。一个主要区别是您不能在后者中使用continuebreak,而是需要使用另一种机制,例如return

相关内容