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

如何在Select-Object中结合动态传入的属性使用计算属性?

问题解决:PowerShell Select-Object 未添加自定义属性

问题原因

你当前的写法中,@ObjArgs展开后相当于给Select-Object传递了-Property $Property参数,后面的自定义属性哈希表并未被合并到-Property的参数数组中,因此Select-Object只会返回你指定的Mode和Name属性,忽略了后面的自定义属性定义。

解决方案

以下几种方法都可以解决这个问题:

方法1:合并属性数组后直接传递

将用户指定的属性和自定义属性合并为一个数组,再传给Select-Object:

Function Test{
    [CmdletBinding()]
    Param(
        [Array]$Property
    )
    $selectedProperties = $Property + @{Name="AllCapsName";Expression={($_.basename).ToUpper()}}
    Get-ChildItem | Select-Object $selectedProperties
}

方法2:修改哈希表中的Property值

在构建$ObjArgs哈希表时,直接将自定义属性合并到Property数组中:

Function Test{
    [CmdletBinding()]
    Param(
        [Array]$Property
    )
    $ObjArgs = @{
        Property = $Property + @{Name="AllCapsName";Expression={($_.basename).ToUpper()}}
    } 
    Get-ChildItem | Select-Object @ObjArgs
}

方法3:直接指定-Property参数

省略哈希表展开,直接将$Property和自定义属性作为数组传递给-Property参数:

Function Test{
    [CmdletBinding()]
    Param(
        [Array]$Property
    )
    Get-ChildItem | Select-Object -Property $Property, @{Name="AllCapsName";Expression={($_.basename).ToUpper()}}
}

执行Test -Property Mode, Name后,就能得到你期望的包含AllCapsName属性的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:02