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

PowerShell左连接后如何配置条件性Name属性

PowerShell左连接中动态设置Name属性的解决方案

你遇到的问题核心是:在LeftJoin的-Property参数中,直接编写的If语句会在定义哈希表时就立即执行,而非在每条记录匹配时动态判断。正确的做法是用**脚本块({})**包裹逻辑,让它在处理每条记录时再执行,这样才能正确访问当前的$Left和$Right对象。

修正后的代码

把原来的Name属性定义改成脚本块形式:

$objectA = @(
    @{
        "Id"="1"
        "Name"="Bob"
    }, 
    @{
        "Id"="2"
        "Name"="Bill"
    },
    @{
        "Id"="3"
        "Name"="Ted"
    }
) 

$objectB = @(
    @{
        "Id"="2"
        "Name"="John"
    }
) 

$objectA | LeftJoin $objectB -On Id -Property @{ID = 'Left.ID'}, @{Name = { if ($null -ne $Right) { $Right.Name } else { $Left.Name } }} | Format-Table

输出结果

执行后会得到你期望的结果:

ID Name
-- ----
1  Bob  
2  John
3  Ted

关键说明

  • 当使用LeftJoin时,-Property参数的哈希表值如果是字符串,会直接被解析为固定的字段引用;如果是脚本块,则会在每条记录匹配时执行,此时$Left代表左表当前记录,$Right代表右表匹配到的记录(无匹配时为$null)。
  • 用$null -ne $Right判断是否存在右表匹配记录,是PowerShell中更安全的空值判断方式,可避免因对象类型导致的误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:25:03