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

PowerShell中使用计算属性匹配列表添加友好名称列问题

解决PowerShell列表匹配合并问题

问题分析

你的原代码存在两个核心问题:

  1. 计算属性脚本块中嵌套ForEach-Object完全多余——脚本块本身就是针对$serviceusage2的每个对象执行的,$_已经代表当前处理的对象。
  2. 匹配逻辑错误:$spdata中不存在Servicename列,正确的匹配字段是ServicePlanName,且你用索引的方式无法实现正确的匹配筛选。

解决方案

方案1:直接在计算属性中筛选匹配(适合数据量较小的场景)

$serviceusage2 | Select-Object ServiceName, 
    @{Name='FriendlyName'; Expression={ ($spdata | Where-Object ServicePlanName -eq $_.ServiceName).ServicePlanDisplayName }},
    ActivatedUsers

逻辑说明:针对$serviceusage2的每个对象,从$spdata中筛选出ServicePlanName与当前对象ServiceName一致的项,提取其ServicePlanDisplayName作为新列FriendlyName。

方案2:先构建哈希表映射(适合数据量较大的场景,提升匹配效率)

如果$spdata数据量较多,每次循环都执行筛选会拖慢速度,建议先构建一个映射哈希表:

# 构建ServicePlanName到ServicePlanDisplayName的映射哈希表
$spNameMap = @{}
$spdata | ForEach-Object { $spNameMap[$_.ServicePlanName] = $_.ServicePlanDisplayName }

# 基于哈希表快速匹配合并
$serviceusage2 | Select-Object ServiceName,
    @{Name='FriendlyName'; Expression={ $spNameMap[$_.ServiceName] }},
    ActivatedUsers

逻辑说明:先把$spdata中的ServicePlanName作为键、ServicePlanDisplayName作为值存入哈希表,后续直接通过键取值,匹配效率大幅提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:12:45