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

PowerShell中ForEach循环生成表格时值输出异常求助

问题原因

你这段代码的核心问题出在生成报表的嵌套循环里:对每个监控名称($executedMonitor),你又把所有$Values遍历了一遍,每次都给$Results.Status赋值,最后自然只剩最后一个$Value的passFail结果,所以所有行的Status都是同一个值。

解决方法

因为$executedMonitors和$Values是一一对应的同长度列表,直接按索引关联两者就行,不用嵌套循环。下面是修正后的完整代码:

# 读取并解析JSON文件
$json = Get-Content $OutputJsonFile -Raw | ConvertFrom-Json

# 获取监控名称列表
$executedMonitors = $json.result.data.dimensionMap."dt.entity.synthetic_test.name"

# 获取数值列表
$Values = $json.result.data.values
Write-Host "原始数值: " $Values

# 给每个数值添加passFail属性
$condition = 1  # 改成数字类型,避免字符串比较的潜在问题
foreach ($value in $Values) {
    $passFail = if ($value -ge $condition) { "PASS" } else { "FAIL" }
    $value | Add-Member -NotePropertyName passFail -NotePropertyValue $passFail -Force
}
Write-Host "添加状态后的数值: " $Values.passFail

# 生成关联报表(按索引一一对应)
$Report = for ($i = 0; $i -lt $executedMonitors.Count; $i++) {
    [PSCustomObject]@{
        Application = $executedMonitors[$i]
        Status      = $Values[$i].passFail
    }
}

# 输出表格验证
$Report | Format-Table -AutoSize

# 转换为HTML(用于邮件内容)
$htmlReport = $Report | ConvertTo-Html -Title "监控状态报表" -PreContent "<h2>合成监控执行状态</h2>"
# 自定义HTML样式优化显示(可选)
$htmlReport = $htmlReport -replace "<table>", "<table border='1' cellpadding='4' cellspacing='0'>"
关键改动说明
  • 把嵌套的foreach循环改成了for索引循环,直接通过$i取对应位置的监控名称和状态值,确保一一对应
  • 把$condition从字符串'1'改成数字1,避免字符串与数字比较时的意外逻辑错误
  • 用[PSCustomObject]直接创建对象,比SELECT语法更简洁直观
  • 增加了转HTML的代码,并添加基础样式优化邮件显示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:25:57