首页 > 解决方案 > 将 CSV 的内容通过电子邮件发送到表格

问题描述

我正在开发一个 powershell 脚本,该脚本从五列逗号分隔符 CSV 中获取数据,并将其加载到五列 HTML 表中以发送电子邮件。目前,该代码仅输出 1 行,而不是 CSV 文件中的 15 行。您能帮我将 CSV 中的 15 行打印到表格中吗?

$current_date = Get-Date
$current_date.ToUniversalTime()

$server_name = $env:COMPUTERNAME

$file = Get-Content .\data_file.csv 
Write-Output "file length: " $file.Length
for ($i = 1; $i -lt $file.Length; $i++) {
    $firstname = ([string]$file[$i]).Split(',')[0];
    $lastname = ([string]$file[$i]).Split(',')[1]; 
    $gender = ([string]$file[$i]).Split(',')[2]; 
    $age = ([string]$file[$i]).Split(',')[3];
    $dob = ([string]$file[$i]).Split(',')[4];
}

$mailsender = @{
    Body = "<p style='font-family: Calibri;'>Audit Report as of: $current_date</p>
<table style='border-collapse: collapse; font-family: Calibri;'>
    <tr style='border: 1px solid #dddddd;text-align: left;padding: 8px;background-color:#f7f7f7;'>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>First Name</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>Last Name</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>Gender</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>Age</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>DoB</th>
    </tr>
    <tr style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$firstname</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$lastname</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$gender</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$age</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$dob</td>
    </tr>
</table>"
    From = 'john.doe@email.com'
    To = 'john.doe@email.com'
    SmtpServer = 'mailhost.net'
    BodyAsHtml = $true
    Subject = "[$env:COMPUTERNAME] Audit Report"
}

Send-MailMessage @mailsender

标签: powershell

解决方案


您必须在 for 循环中定义一个变量并将每组表行添加到其中,然后在 Body 声明中调用该变量:

$current_date = Get-Date
$current_date.ToUniversalTime()

$server_name = $env:COMPUTERNAME

$file = Get-Content .\data_file.csv 
Write-Output "file length: " $file.Length
for ($i = 1; $i -lt $file.Length; $i++)
{ 
$firstname = ([string]$file[$i]).Split(',')[0] ;
$lastname = ([string]$file[$i]).Split(',')[1] ; 
$gender = ([string]$file[$i]).Split(',')[2] ; 
$age = ([string]$file[$i]).Split(',')[3] ; 
$dob = ([string]$file[$i]).Split(',')[4] ;

$data += "<tr style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$firstname</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$lastname</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$gender</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$age</td>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>$dob</td>
    </tr>"
}

$mailsender=@{
Body="<p style='font-family: Calibri;'>Audit Report as of: $current_date</p>
<table style='border-collapse: collapse; font-family: Calibri;'>
    <tr style='border: 1px solid #dddddd;text-align: left;padding: 8px;background-color:#f7f7f7;'>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>First Name</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>Last Name</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>Gender</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>Age</th>
        <th style='border: 1px solid #dddddd;text-align: left;padding: 8px;'>DoB</th>
    </tr>
    $data
</table>"
From='john.doe@email.com'
To='john.doe@email.com'
   SmtpServer='mailhost.net'
    BodyAsHtml=$true
    Subject="[$env:COMPUTERNAME] Audit Report"
}

Send-MailMessage @mailsender

推荐阅读