如何使用PowerShell根据授权天数为HTML表格指定行设置颜色
PowerShell 生成带行背景色HTML报表实现方法
核心实现逻辑
- 先修正原有代码的重复输出bug:原循环中无论是否匹配判断条件,都会先输出一次对象,导致最终表格数据重复,需要移除循环内无判断的冗余输出语句。
- 为每条授权记录新增自定义属性存储对应行的背景色值,规则严格匹配需求:
- 授权剩余天数
>90:背景色设为红色 - 授权剩余天数
0<天数<=90(临期状态):背景色设为黄色 - 授权剩余天数
<0(已过期状态):背景色设为绿色
- 授权剩余天数
- 生成基础HTML后,逐行匹配表格行标签,注入对应行的背景样式。
修正后完整代码
$sInFile = "C:\Users\akilic\Desktop\tarihlerr.csv" $cInCsv = Import-Csv -Path $sInFile -Delimiter ";" -Encoding UTF7 $StartDate = Get-Date $sDateFormat = "%d.%m.%Y" $header = @" <style> table {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;} th {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;} td {border-width: 1px; padding: 3px; border-style: solid; border-color: black;} </style> "@ $result = foreach ($ThisUser in $cInCsv) { $EndDate = Get-Date ($ThisUser.'bitis') $licence = (New-TimeSpan –Start $StartDate –End $EndDate).Days # 判定对应行背景色 $rowBg = if($licence -gt 90){ "#ff4d4d" } elseif($licence -gt 0 -and $licence -le 90){ "#fff2cc" } else{ "#c6efce" } # 输出带行色标记的记录对象 $ThisUser | Select-Object product,bitis, @{Name='gun'; Expression={$licence}}, @{Name='RowBg'; Expression={$rowBg}} } # 生成基础HTML结构 $html = $result | ConvertTo-Html -Head $header # 逐行为表格行注入对应背景样式 for($i=0;$i -lt $result.Count;$i++){ $html = $html -replace "<tr>", "<tr style=`"background-color: $($result[$i].RowBg)`">", 1 } # 移除临时标记列,不在前端页面展示 $html = $html -replace "<th>RowBg</th>","" $html = $html | ForEach-Object { $_ -replace "<td>[a-f0-9#]{6,7}</td>","" } # 输出最终HTML文件 $html | Out-File "C:\Users\akilic\Desktop\health.html"
补充说明
- 原代码CSS部分多余的闭合花括号已删除,避免样式渲染失效。
- 代码中使用的颜色值可根据实际视觉需求自行替换为对应十六进制色值。
- 若需要在页面展示行色标记字段,删除代码中移除临时标记列的两段替换逻辑即可。
内容的提问来源于stack exchange,提问作者AhmetKılıç
相关产品推荐
相关产品推荐

