You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell生成HTML报告:按利用率条件设置行颜色问题求助

解决PowerShell生成HTML存储报告时行颜色不生效问题

问题分析

你的代码只修改第一行颜色的核心原因:

  1. 循环内重复导入CSV并生成HTML,每次循环都会覆盖$bodyB,最终仅保留最后一次循环结果,逻辑冗余且错误。
  2. 使用-OutVariable ag获取的是整个CSV对象集合,在foreach中判断$ag.Utilized -gt 90时,PowerShell会默认取集合第一个元素的值作为判断依据,导致所有行都套用第一行的颜色规则。

修正后的完整代码

# 替换为你的实际路径
$TPATH = "你的TPATH路径"
$PATH = "你的PATH路径"

# 1. 处理agg.csv生成规范的aggregate.csv
# 写入CSV表头
$header = "Aggregate,Size,Available,Used,Utilized,State"
$header | Out-File "$TPATH\aggregate.csv" -Encoding UTF8

# 读取并转换agg.csv数据
Get-Content "$TPATH\agg.csv" | ForEach-Object {
    $fields = $_.Split(",", 10)
    $utilized = $fields[2].TrimEnd('%') # 移除百分号,转为纯数字
    # 按指定顺序构造数据行
    "$($fields[0]),$($fields[3]),$($fields[1]),$($fields[5]),$utilized,$($fields[4])"
} | Out-File "$TPATH\aggregate.csv" -Encoding UTF8 -Append

# 2. 生成带行颜色的HTML报告
$aggData = Import-Csv "$TPATH\aggregate.csv"

# 生成基础HTML片段
$htmlFragment = $aggData | ConvertTo-Html -Fragment -Property Aggregate,Size,Available,Used,Utilized,State

# 为每一行设置对应背景色
$coloredHtml = $htmlFragment | ForEach-Object -Begin { $rowIndex = 0 } -Process {
    if ($_ -match '<tr>') {
        if ($rowIndex -eq 0) {
            # 表头行保持原样式
            $_
        } else {
            # 匹配对应数据行的利用率,设置颜色
            $utilizedValue = [int]$aggData[$rowIndex - 1].Utilized
            $bgColor = $utilizedValue -gt 90 ? '#FE0808' : '#E5FCA1'
            $_ -replace '<tr>', "<tr bgcolor=`"$bgColor`">"
        }
        $rowIndex++
    } else {
        # 非<tr>标签的内容直接返回
        $_
    }
}

# 生成完整HTML文件
ConvertTo-Html -Body "<br>$($coloredHtml -join "`n")" | Out-File "$PATH\Netapp.html" -Encoding UTF8

关键改进点

  • 一次性处理CSV:避免循环内重复读写文件,提升效率并保证数据完整性。
  • 行数据与HTML标签绑定:通过索引将每一行HTML与CSV中的具体对象对应,确保每一行都能根据自身利用率值判断颜色。
  • 表头单独处理:保留表头默认样式,仅为数据行设置背景色。

内容的提问来源于stack exchange,提问作者Faizal Izham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:25:21