数组重复VMHost元素比对需求:检测Paths/Devices属性差异
重复VMHost记录的属性差异检测脚本实现
需求说明
- 识别数组中VMHost值重复的记录
- 对同一VMHost的多条记录,比对
Paths、Devices等指定属性 - 若属性值存在差异,输出明确的提示信息
输入示例数组
$hostRecords = @( @{VMHost='host1'; HBA='vmhba1'; Targets=1; Devices=2; Paths=5}, @{VMHost='host1'; HBA='vmhba2'; Targets=2; Devices=3; Paths=6}, @{VMHost='host2'; HBA='vmhba1'; Targets=2; Devices=3; Paths=6}, @{VMHost='host2'; HBA='vmhba2'; Targets=2; Devices=3; Paths=6}, @{VMHost='host3'; HBA='vmhba1'; Targets=2; Devices=3; Paths=6}, @{VMHost='host3'; HBA='vmhba2'; Targets=2; Devices=3; Paths=6} )
实现脚本
# 定义需要比对的属性列表 $propertiesToCheck = @('Paths', 'Devices', 'Targets') # 按VMHost分组处理 $hostGroups = $hostRecords | Group-Object -Property VMHost foreach ($group in $hostGroups) { # 仅处理存在多条记录的VMHost if ($group.Count -le 1) { continue } Write-Host "`n检测到重复的$($group.Name)记录,开始比对属性..." -ForegroundColor Cyan # 获取当前组的第一条记录作为基准 $baseRecord = $group.Group[0] # 遍历组内其他记录,逐一比对属性 foreach ($record in $group.Group[1..($group.Count-1)]) { foreach ($prop in $propertiesToCheck) { if ($baseRecord[$prop] -ne $record[$prop]) { Write-Warning "比对$($group.Name)的$prop属性不匹配:基准值=$($baseRecord[$prop]),当前记录值=$($record[$prop])" } } } }
脚本说明
- 分组筛选:通过
Group-Object按VMHost对记录分组,只处理包含多条记录的分组 - 基准比对:以每组第一条记录为基准,和组内其他记录逐一比对指定属性
- 差异输出:若属性值不匹配,用警告信息输出具体差异内容
运行结果示例
检测到重复的host1记录,开始比对属性... WARNING: 比对host1的Paths属性不匹配:基准值=5,当前记录值=6 WARNING: 比对host1的Devices属性不匹配:基准值=2,当前记录值=3 WARNING: 比对host1的Targets属性不匹配:基准值=1,当前记录值=2
内容的提问来源于stack exchange,提问作者Kvara
相关产品推荐
相关产品推荐

