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
相关产品推荐
相关产品推荐

