如何用PowerShell生成带颜色标记的AD复制状态动态HTML表格?
实现AD复制状态HTML表格的动态单元格颜色
核心做法
先拉取AD复制状态数据,再通过PowerShell遍历数据生成HTML表格时,根据Last Result的值给对应单元格加内联样式——值为0时设绿色背景,大于0时设红色背景,最后把这个HTML作为邮件正文发送。
具体代码实现
- 获取AD复制数据
用Get-ADReplicationPartnerMetadata命令获取所需的复制信息:
# 加载AD模块(未自动加载时执行) Import-Module ActiveDirectory # 获取所有服务器的复制伙伴元数据,筛选关键字段 $replicationStats = Get-ADReplicationPartnerMetadata -Target * -Partition * | Select-Object Server, PartnerServer, Partition, LastReplicationSuccess, LastResult
- 生成带颜色的HTML表格
先定义基础表格样式,再逐行处理数据,动态设置单元格背景色:
# 定义HTML基础样式(适配邮件客户端显示) $htmlStyle = @" <style> table { border-collapse: collapse; width: 95%; margin: 10px auto; } th { background: #f0f0f0; padding: 8px; border: 1px solid #ccc; } td { padding: 8px; border: 1px solid #ccc; } </style> "@ # 初始化表格头部 $htmlTable = "<table><tr><th>本地服务器</th><th>伙伴服务器</th><th>分区</th><th>最后复制成功时间</th><th>复制结果</th></tr>" # 遍历数据行,给复制结果单元格添加颜色样式 foreach ($stat in $replicationStats) { # 根据Last Result值判断样式 $cellStyle = if ($stat.LastResult -eq 0) { "background-color: #dff0d8; color: #3c763d;" } else { "background-color: #f2dede; color: #a94442;" } # 拼接当前行的HTML内容 $htmlTable += @" <tr> <td>$($stat.Server)</td> <td>$($stat.PartnerServer)</td> <td>$($stat.Partition)</td> <td>$($stat.LastReplicationSuccess)</td> <td style="$cellStyle">$($stat.LastResult)</td> </tr> "@ } # 闭合表格标签,组合完整HTML邮件正文 $htmlTable += "</table>" $emailBody = $htmlStyle + $htmlTable
- 发送HTML格式邮件
把生成的HTML作为邮件正文发送,注意指定-BodyAsHtml参数确保HTML渲染:
Send-MailMessage -From "ad-monitor@yourdomain.com" ` -To "admin-team@yourdomain.com" ` -Subject "每日AD复制状态报告" ` -Body $emailBody ` -BodyAsHtml ` -SmtpServer "smtp.yourdomain.com"
注意事项
- 邮件客户端大多不支持外部样式表,直接在
<td>标签内写内联样式是最稳妥的兼容方式,头部的基础样式仅用于优化表格整体显示。 - 运行脚本的账号需具备读取AD复制元数据的权限,且已安装ActiveDirectory模块(通常在域控制器或RSAT工具包中)。
内容的提问来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

