Powershell:在html报告的顶部显示一次表标题

Powershell:在html报告的顶部显示一次表标题,powershell,powershell-2.0,Powershell,Powershell 2.0,我正在尝试创建电子邮件报告,以显示失败/成功备份作业的列表 这是我的剧本: $servers = @(gc config\dbs.txt) foreach($server in $servers) { $dt = new-object "System.Data.DataTable" $cn = new-object System.Data.SqlClient.SqlConnection "server=$server;database=msdb;Integrated Security=s

我正在尝试创建电子邮件报告,以显示失败/成功备份作业的列表

这是我的剧本:

$servers = @(gc config\dbs.txt)
foreach($server in $servers)
{
  $dt = new-object "System.Data.DataTable"
  $cn = new-object System.Data.SqlClient.SqlConnection "server=$server;database=msdb;Integrated Security=sspi"
  $cn.Open()
  $sql = $cn.CreateCommand()
  $sql.CommandText = $(get-content config\query.sql)
  $rdr = $sql.ExecuteReader()
  $dt.Load($rdr)
  $cn.Close()
  $dt |ft Server,RunStatus,JobName >> $log
  $dt | ConvertTo-Html Server,JobName,RunStatus -head $a | ac logs\backups\report.htm    
}

Server      JobName     RunStatus
srv1        job1        success
srv1        job2        success
Server      JobName     RunStatus
srv2        job1        fail
srv2        job2        success
srv2        job3        success
Server      JobName     RunStatus
srv3        job1        fail
srv3        job2        success
srv3        job3        success
Server      JobName     RunStatus
srv4        job1        fail
srv4        job2        success
srv4        job3        success
Server      JobName     RunStatus
srv5        job1        fail
在每次foreach枚举之后添加html文件的内容时,我会多次获得标题名。我是否可以更改脚本,使标题[Server JobName RunStatus]仅在顶部显示一次

另外,我想知道是否可以将report.htm显示为邮件中的内联内容,而不是附件。这可能吗

提前感谢。

steeluser

每个枚举都会显示表格标题,因为您在每个枚举中都使用了
转换为HTML
:)。这同样适用于
格式表
。试试这个:

$dts = @() @(gc config\dbs.txt) | % { $dt = new-object "System.Data.DataTable" $cn = new-object System.Data.SqlClient.SqlConnection "server=$server;database=msdb;Integrated Security=sspi" $cn.Open() $sql = $cn.CreateCommand() $sql.CommandText = $(get-content config\query.sql) $rdr = $sql.ExecuteReader() $dt.Load($rdr) $cn.Close() $dts += $dt } $dts |ft Server,RunStatus,JobName >> $log $dts | ConvertTo-Html Server,JobName,RunStatus -head $a | ac logs\backups\report.htm $dts=@() @(gc config\dbs.txt)|%{ $dt=新对象“System.Data.DataTable” $cn=新对象System.Data.SqlClient.SqlConnection“服务器=$server;数据库=msdb;集成安全=sspi” $cn.Open() $sql=$cn.CreateCommand() $sql.CommandText=$(获取内容配置\query.sql) $rdr=$sql.ExecuteReader() $dt.负载($rdr) $cn.Close() $dts+=$dt } $dts | ft服务器,运行状态,作业名>>$log $dts |转换为Html服务器、作业名、运行状态-head$a | ac logs\backups\report.htm
每个枚举都会显示表标题,因为您在每个枚举中使用的是
ConvertTo HTML
:)。这同样适用于
格式表
。试试这个:

$dts = @() @(gc config\dbs.txt) | % { $dt = new-object "System.Data.DataTable" $cn = new-object System.Data.SqlClient.SqlConnection "server=$server;database=msdb;Integrated Security=sspi" $cn.Open() $sql = $cn.CreateCommand() $sql.CommandText = $(get-content config\query.sql) $rdr = $sql.ExecuteReader() $dt.Load($rdr) $cn.Close() $dts += $dt } $dts |ft Server,RunStatus,JobName >> $log $dts | ConvertTo-Html Server,JobName,RunStatus -head $a | ac logs\backups\report.htm $dts=@() @(gc config\dbs.txt)|%{ $dt=新对象“System.Data.DataTable” $cn=新对象System.Data.SqlClient.SqlConnection“服务器=$server;数据库=msdb;集成安全=sspi” $cn.Open() $sql=$cn.CreateCommand() $sql.CommandText=$(获取内容配置\query.sql) $rdr=$sql.ExecuteReader() $dt.负载($rdr) $cn.Close() $dts+=$dt } $dts | ft服务器,运行状态,作业名>>$log $dts |转换为Html服务器、作业名、运行状态-head$a | ac logs\backups\report.htm
谢谢empo!!这已经奏效了。。我之前尝试过$dts+=$dt,但是失败了,因为我还在循环中执行ConvertToHtml。。所以我只得到了$dt的最后一个结果集,我没有想到我做错了什么。。我想长时间的工作会对你造成影响。。干杯:-)第二个问题的答案对我来说太复杂了。。我想我需要休息一段时间来度过难关。。谢谢你给我一个起点…-)祝你度过愉快的一天。在第二个答案中,你只有一个函数的链接。您可以下载该函数,在脚本中添加相关的.ps1,然后像使用任何其他cmdlet一样调用该函数:)谢谢empo!!这已经奏效了。。我之前尝试过$dts+=$dt,但是失败了,因为我还在循环中执行ConvertToHtml。。所以我只得到了$dt的最后一个结果集,我没有想到我做错了什么。。我想长时间的工作会对你造成影响。。干杯:-)第二个问题的答案对我来说太复杂了。。我想我需要休息一段时间来度过难关。。谢谢你给我一个起点…-)祝你度过愉快的一天。在第二个答案中,你只有一个函数的链接。您可以下载该函数,在脚本中添加相关的.ps1,然后像使用任何其他cmdlet一样调用该函数:)