我有一个脚本,它在HTML页面上的所有服务器上显示磁盘空间,并且从保存的HTML文件的内容并排发送电子邮件。
HTML文件是完美的,并且电子邮件在HTML文件中显示相同的表格信息。 但是,这些表格在电子邮件中重叠。
代码如下:
$freeSpaceFileName = "c:\script\FreeSpace.htm" $serverlist = "c:\script\computers.txt" $warning = 50 $critical = 30 New-Item -ItemType file $freeSpaceFileName -Force # Getting the freespace info using WMI #Get-WmiObject win32_logicaldisk | Where-Object {$_.drivetype -eq 3} | format-table DeviceID, VolumeName,status,Size,FreeSpace | Out-File FreeSpace.txt # Function to write the HTML Header to the file Function writeHtmlHeader { param($fileName) $date = ( get-date ).ToString('dd/MM/yyyy HH:mm:ss') Add-Content $fileName "<html>" Add-Content $fileName "<head>" Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>" Add-Content $fileName '<meta http-equiv="refresh" CONTENT="5">' Add-Content $fileName '<title>All Servers DiskSpace Report by Taher Tamboli ©</title>' add-content $fileName '<STYLE TYPE="text/css">' add-content $fileName "<!--" add-content $fileName "td {" add-content $fileName "font-family: Tahoma;" add-content $fileName "font-size: 20px;" add-content $fileName "border-top: 1px solid #999999;" add-content $fileName "border-right: 1px solid #999999;" add-content $fileName "border-bottom: 1px solid #999999;" add-content $fileName "border-left: 1px solid #999999;" add-content $fileName "padding-top: 0px;" add-content $fileName "padding-right: 0px;" add-content $fileName "padding-bottom: 0px;" add-content $fileName "padding-left: 0px;" add-content $fileName "}" add-content $fileName "body {" add-content $fileName "margin-left: 5px;" add-content $fileName "margin-top: 5px;" add-content $fileName "margin-right: 0px;" add-content $fileName "margin-bottom: 10px;" add-content $fileName "" add-content $fileName "table {" add-content $fileName "border: thin solid #000000;" add-content $fileName "}" add-content $fileName "-->" add-content $fileName "</style>" Add-Content $fileName "</head>" Add-Content $fileName "<body>" add-content $fileName "<br></br>" add-content $fileName "<table width='100%' align=center>" add-content $fileName "<tr bgcolor='#CCCCCC'>" add-content $fileName "<td colspan='7' height='25' align='center'>" add-content $fileName "<font face='tahoma' color='#003399' size='5'><strong>All Servers DiskSpace Report by Taher Tamboli 2014 © - $date</strong></font>" add-content $fileName "</td>" add-content $fileName "</tr>" add-content $fileName "</table>" add-content $fileName "<br></br>" } # Function to write the HTML Header to the file Function writeTableHeader { param($fileName) Add-Content $fileName "<tr bgcolor=#CCCCCC>" Add-Content $fileName "<td width='10%' align='center'>Drive</td>" Add-Content $fileName "<td width='50%' align='center'>Drive Label</td>" Add-Content $fileName "<td width='10%' align='center'>Total Capacity(GB)</td>" Add-Content $fileName "<td width='10%' align='center'>Used Capacity(GB)</td>" Add-Content $fileName "<td width='10%' align='center'>Free Space(GB)</td>" Add-Content $fileName "<td width='10%' align='center'>Freespace %</td>" Add-Content $fileName "</tr>" } Function writeHtmlFooter { param($fileName) Add-Content $fileName "</body>" Add-Content $fileName "</html>" } Function writeDiskInfo { param($fileName,$devId,$volName,$frSpace,$totSpace) $totSpace=[math]::Round(($totSpace/1073741824),2) $frSpace=[Math]::Round(($frSpace/1073741824),2) $usedSpace = $totSpace - $frspace $usedSpace=[Math]::Round($usedSpace,2) $freePercent = ($frspace/$totSpace)*100 $freePercent = [Math]::Round($freePercent,0) if ($freePercent -gt $warning) { Add-Content $fileName "<tr>" Add-Content $fileName "<td>$devid</td>" Add-Content $fileName "<td>$volName</td>" Add-Content $fileName "<td>$totSpace</td>" Add-Content $fileName "<td>$usedSpace</td>" Add-Content $fileName "<td>$frSpace</td>" Add-Content $fileName "<td>$freePercent</td>" Add-Content $fileName "</tr>" } elseif ($freePercent -le $critical) { Add-Content $fileName "<tr>" Add-Content $fileName "<td>$devid</td>" Add-Content $fileName "<td>$volName</td>" Add-Content $fileName "<td>$totSpace</td>" Add-Content $fileName "<td>$usedSpace</td>" Add-Content $fileName "<td>$frSpace</td>" Add-Content $fileName "<td bgcolor='#FF0000' align=center>$freePercent</td>" #<td bgcolor='#FF0000' align=center> Add-Content $fileName "</tr>" } else { Add-Content $fileName "<tr>" Add-Content $fileName "<td>$devid</td>" Add-Content $fileName "<td>$volName</td>" Add-Content $fileName "<td>$totSpace</td>" Add-Content $fileName "<td>$usedSpace</td>" Add-Content $fileName "<td>$frSpace</td>" Add-Content $fileName "<td bgcolor='#FBB917' align=center>$freePercent</td>" # #FBB917 Add-Content $fileName "</tr>" } } Function sendEmail { param($from,$to,$subject,$smtphost,$htmlFileName) $from=New-Object System.Net.Mail.MailAddress "[email protected]" $to= New-Object System.Net.Mail.MailAddress "[email protected]" $subject="Servers Disk space report - $Date" $smtphost="smtp.google.com" $body = Get-Content $htmlFileName $smtp= New-Object System.Net.Mail.SmtpClient $smtphost $msg = New-Object System.Net.Mail.MailMessage $from, $to, $subject, $body $msg.isBodyhtml = $true $smtp.Send($msg) } writeHtmlHeader $freeSpaceFileName foreach ($server in Get-Content $serverlist) { Add-Content $freeSpaceFileName "<table width='100%'><tbody>" Add-Content $freeSpaceFileName "<tr bgcolor='#CCCCCC'>" Add-Content $freeSpaceFileName "<td width='100%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong> $server</strong></font></td>" Add-Content $freeSpaceFileName "</tr>" Add-Content $freeSpaceFileName "<br>" writeTableHeader $freeSpaceFileName $dp = Get-WmiObject win32_logicaldisk -ComputerName $server | Where-Object {$_.drivetype -eq 3} foreach ($item in $dp) { Write-Host $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size writeDiskInfo $freeSpaceFileName $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size } } writeHtmlFooter $freeSpaceFileName $date = ( get-date ).ToString('yyyy/MM/dd') #sendEmail [email protected] [email protected] "Disk Space Report - $Date" hub1 $freeSpaceFileName
发生这种情况的原因是您不要在函数writeDiskInfo
使用</table>
closures<table>
标记。
要解决这个问题,请在函数closures括号之前添加以下内容:
Add-Content $fileName "</table>"
所以,你的function如下所示:
Function writeDiskInfo { ...... ...... if ($freePercent -gt $warning) { ..... } elseif ($freePercent -le $critical) { ..... } else { ..... } Add-Content $fileName "</table>" # <--- ADD THIS HERE ! }
似乎浏览器比邮件客户端更容易出现语法错误;)
KrisFR所说的是正确的,你需要添加表格命令的结尾,但是他错误地提到了它。 您需要在函数的结束括号之前添加writeHtmlHeader函数。
writeHtmlHeader $ freeSpaceFileName
foreach(Get-Content $ serverlist中的$ server)
{
... ...
foreach($ item中的$ dp)
{
... ...
}
添加内容$ fileName“/ table>”#<—添加此处!
}