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

PowerShell脚本问题:CSV服务器名与内存使用率对应输出异常

修正ESX主机内存使用率监控脚本(解决服务器名不匹配问题)

问题根源

所有记录显示同一服务器名的核心原因是:脚本未在循环迭代时正确绑定当前行的服务器数据——要么是服务器名变量在循环外提前赋值未更新,要么是遍历逻辑错误导致复用了同一个变量值。

修正后的完整脚本

假设你的CSV文件包含ServerName(服务器名)和MemoryUsage(内存使用率,数值格式)两列,修正后的脚本如下:

# 配置参数
$memoryThreshold = 45
$csvPath = "C:\Path\To\Your\ESX_Hosts.csv"
$outputDatPath = "C:\Path\To\Output\ESX_Memory_Status.dat"

# 读取CSV数据
$esxHostList = Import-Csv -Path $csvPath

# 清空现有输出文件(可选,若需追加旧数据可注释此行)
if (Test-Path $outputDatPath) { Remove-Item $outputDatPath -Force }

# 遍历每台主机处理数据
foreach ($esxHost in $esxHostList) {
    # 提取当前行的核心数据
    $currentServer = $esxHost.ServerName
    $currentMemUsage = [double]$esxHost.MemoryUsage
    $currentTimestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

    # 判断内存状态
    $status = if ($currentMemUsage -gt $memoryThreshold) { "超标" } else { "正常" }

    # 生成格式化记录
    $logRecord = "$currentServer,$currentTimestamp,$currentMemUsage%,内存状态:$status"

    # 写入DAT文件
    Add-Content -Path $outputDatPath -Value $logRecord
}

Write-Host "监控记录已成功生成:$outputDatPath"

关键修正点说明

  • 循环内绑定当前行数据:通过$esxHost.ServerName直接提取当前迭代行的服务器名,确保每条记录对应正确的主机
  • 数值类型转换:将MemoryUsage转换为double类型,避免字符串比较导致的逻辑错误
  • 记录生成逻辑内聚:所有与当前主机相关的状态判断、记录拼接都在循环内部完成,保证数据一一对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:14