我正在尝试创建电子邮件报告以显示失败/成功的备份作业的列表。
这是我的脚本:
$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文件的内容添加的过程中,多次获取 header 名称。我可以更改脚本,以使标题[Server JobName RunStatus]仅在顶部显示一次吗?
我也想知道是否可以在邮件中而不是附件中将report.htm显示为内联内容。这可能吗?
提前致谢。
钢铁使用者
最佳答案
表标题显示为每个枚举,因为您在每个枚举中使用ConvertTo-HTML
:)。 format-table
也是如此。试试看:
$ dts = @()
@(gc config \ dbs.txt)| %{
$ dt =新对象“System.Data.DataTable”
$ cn =新对象System.Data.SqlClient.SqlConnection“server = $ server; database = msdb; Integrated Security = sspi”
$ cn.Open()
$ sql = $ cn.CreateCommand()
$ sql.CommandText = $(获取内容配置\ query.sql)
$ rdr = $ sql.ExecuteReader()
$ dt.Load($ rdr)
$ cn.Close()
$ dts + = $ dt
}
$ dts | ft服务器,RunStatus,作业名称>> $ log
$ dts |转换为HTML服务器,JobName,RunStatus -head $ a | ac日志\备份\ report.htm
关于powershell - Powershell:在html报告的顶部一次显示表头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643830/